クラスを自動的にロードするために php __autoload state を使用しています。今日、良いプログラムが実行中にクラスを再宣言できませんというメッセージが表示される方法がわかりません。以下の解決策を分析してみましょう。
エラーメッセージ
致命的なエラー: クラスを再宣言できません….
文字通りの観点から理解すると、クラスが繰り返し定義されていることがわかり、同じ名前のクラスが存在することが原因であることがわかりました。
原因分析
1. 同じ名前のクラスが同じファイル内で 2 回宣言されています:
例:
コードは次のとおりです | コードをコピー |
クラス Foo {} // ここにコードをいくつか載せます クラス Foo {} ?> |
2番目のFooでエラーが報告されます。
解決策: 2 番目の Foo を削除するか、名前を変更します。
定義の繰り返しを防ぐために、新しいクラスを定義するときにクラスがすでに存在するかどうかを確認できます:
コードは次のとおりです | コードをコピー |
if(class_exists('SomeClass') != true) { //ここにクラス SomeClass を入れます } if(class_exists('SomeClass') != true) { //ここにクラス SomeClass を置きます } |
2. 同じクラス ファイルを繰り返しインクルードします:
例: 特定のクラス ファイル some_class.php の場合、a.php 内にある
コードは次のとおりです | コードをコピー |
「some_class.php」を含める |
b.php内
コードは次のとおりです | コードをコピー |
|
解決策: 上記の include をすべて include_once に置き換えます
3. このクラスは、PHP クラス ライブラリの組み込みクラスです。
判定方法:空のファイルに書き込む
コードをコピー | |
コードは次のとおりです | コードをコピー |
|
上記の方法は、php __autoload クラスのロードを使用する方法には適用されませんが、__autoload が自動的にロードされるため、同じクラス名を見つけて名前を変更するだけで問題は解決できます。