さて、これが内部でどのように機能するかです。
存在しないクラスを使用しようとすると、そのクラスが存在する (関数がそれらの 1 つになる)spl_autoload
まで、コールバックが 1 つずつ呼び出されます。__autoload
チェーンの最後に存在しない場合は、class not found エラーが発生します。
class_exists
2 番目のパラメータ (存在しない場合はロードしないように指示する) なしで呼び出すと、クラスが見つかるか、最後のメソッドが呼び出されるまで、一連のコールspl_autoload
バックが呼び出されます。次に、クラスが見つかった場合に戻ります。
したがって、それはすべて、オートロード機能で何をしているかに依存します。次のようなことをすると:
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (!file_exists($class)) {
die('Could not find '.$class);
}
require_once $filename;
}
実行を強制終了し、意図したとおりに機能しません。代わりに、次のことを行う必要があります。
function __autoload($class) {
$filename = PATH_TO_CLASSES . $class . '.php';
if (file_exists($class)) {
require_once $filename;
}
}
それはあなたがする必要があるすべてです。
ここで、ファイルを実行したくありません。それはいいです。それには簡単な解決策があります。そのファイルを自動ロードされたクラスと同じディレクトリに入れないでください。オートローディングの目的を無効にします。
他の唯一の解決策は、クラス名のマップをファイル名に保存し、それをオートロードのベースにすることです。そうしないと、常にファイルが実行されます(それがあなたが求めていることだからです)...