2011-11-22 20 views
0

これは前に、これが原因となっている理由がわかっています。しかし、私の場合、問題はMacOS Lion(10.7)でのみ発生しています。これは、PHP 5.3.6です。同じコードベースがPHP 5.3.8のWindows 7マシンで実行されています。致命的なエラー:クラスDbBaseを再宣言できません

私はどこでもrequire_onceを使用しました。この問題を引き起こしていると思われるコードの一部は、複数のファイルからなるファイルに、

class DbBase 
{ 
    ... 
} 

です。

ファイルDBBase.php:

defines Class DBBase 

ファイルA_DB.php:

require_once("DBBase.php") 
私はこのシナリオを持っている

if (class_exists('DbBase') != true) 
{ 
    class DbBase 
    { 
     ... 
    } 
} 

:私は内部クラス宣言をラップする場合は、エラーが消えます

ファイルB_DB.php:

require_once("DBBase.php") 

ファイルfoo.php:

require_once("A_DB.php") 
require_once("B_DB.php) 

ので、ファイルDBBase.phpが二度含まれますありません。それは?

洞察が得意です。

+0

「クラスを再宣言できません」というエラーは、このクラスによって宣言されていない可能性があります。完全なエラーメッセージとそれが参照するファイル/行を投稿することをお勧めします。 – StasM

+0

あなたは正しい、私の謝罪です。問題のコードは実際にはクラス定義です。しかし、if(class_exists( 'ClassName')!= true)でクラス定義をラップしない限り、エラーは消えません。 –

答えて

1

このエラーは、1つのクラスを1回ではなく複数回宣言した場合に発生します。以下のコードはそのエラーを投げるでしょう。

class phpp{} 
class phpp{} 

5.3.6と5.3.8では動作が同じではないようですが、クラスやオブジェクトに大きな変更はありません。

requiring onceのファイルに重複しているコードがないか確認してください。 。 。

EDIT:

ますrequire_once()文は、PHPを除く)(必要と同じであるファイルが既に含まれているかどうかを確認し、もしそうであれば、再び(必要)それは含まれません。

あなたのケースでは、それは複数回含まれていませんが、requireまたはincludeを使用するとします。

しかし、クラスの再宣言を防ぐためにコード全体を再構成する必要があります。

class lol{} 
if(!class_exists("lol")){ 
    class lol{ 
     function ll(){ 
      return "ss"; 
     } 
    } 
} 

echo lol::ll(); 

その^^にアクセスすることはできません。

+0

私は正しい情報を含めるように私の質問を編集しました。間違いをお詫び申し上げます。 –

+0

@ManishGupta編集 – Mob

+0

ありがとう、私は再宣告を防ぐために必要な警備員を追加しました。それはまだ私を打つ、なぜこの問題は窓に表示されませんか? –

3

私は同じエラーがありました。しかし、それは「単一のクラスを複数回宣言する」こととは関係がありませんでした。それは私がこのようなクラスのバックアップを作ったからです: class.shipping.php class.shipping_092512_bk.php 次に、バックアップファイルをサーバーにアップロードしました。そのため、アプリケーションは2つのクラスによって失敗しました。だから、バックアップファイル名を.phpファイル拡張子 'class.shipping_092512.bk'なしに変更しました。問題が解決しました。

関連する問題