奇妙な問題があります。クラスをロードする静的メソッド(load_library)があります。特定のクラスをロードすると、「クラスを再宣言できません」という致命的なエラーが発生しますが、load_libraryメソッドを使用してクラスをロードする直前にクラスが存在するかどうかをテストすると、クラスが存在しないと表示されます。このload_library
メソッドは、そのようなエラーなしで他の場所で機能します。
load_libraryの呼び出しを取得すると、数行後にクラスが実際に使用されたときにクラスが見つからないと表示されます。見知らぬ人ですが、代わりに登録済みのクラス関数を削除すると、この関数はロードしようとしているクラスが含まれているディレクトリをチェックしなくてもautoload
、すべてが完全に機能します。autoload
これは多くのファイルが関係する複雑な問題であるため、コードを投稿するのは困難ですが、この問題は他の人にはなじみのある匂いがしますか?
私のload_libraryメソッド:
public static function load_library($name) {
if (!class_exists($name)) {
if (file_exists('application/libraries/' . $name . '.php')) {
include('application/libraries/' . $name . '.php');
} else {
trigger_error('Request made for non-existant library ('.$name.').', E_USER_ERROR);
}
}
}
load_libraryメソッドの呼び出し:
lev::load_library('lev_unit_tester/lev_base_test');
登録した自動ロード方法:
public static function autoloader($name) {
if (class_exists($name)) return;
if (file_exists('application/libraries/' . $name . '.php')) {
include('application/libraries/' . $name . '.php');
}
}
ロードしようとしているクラス(これはエラーが発生する場所です):
abstract class lev_base_test {
}
実際のエラーメッセージ:
致命的なエラー:5行目の/some/path/application/libraries/lev_unit_tester/lev_base_test.phpでクラスlev_base_testを再宣言できません