参考リンク:
1. spl_autoload_registerとautoloadの違いの詳しい説明
2. php.net自動読み込みクラス
多くの開発者は、オブジェクト指向アプリケーションを作成するときに、クラス定義ごとに PHP ソース ファイルを作成します。大きな煩わしさは、各スクリプトの先頭にインクルード ファイルの長いリスト (クラスごとに 1 つのファイル) を記述しなければならないことです。
PHP 5 では、これは必要なくなりました。まだ定義されていないクラスを使用しようとしたときに自動的に呼び出される __autoload() 関数を定義できます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。
簡単なインポート例:
まず、新しいクラス ファイル MyClass.class.php を作成します。
リーリー同じディレクトリに任意の名前で新しい php ファイルを作成します:
リーリー
このマジックメソッドが定義されている場合
新しいオブジェクトが見つかり、現在のコードでクラス定義が見つからない場合(上記の2つの条件が満たされている場合)、__autoload()関数がクラス名パラメータと関数に渡されます。実行されるコードスニペットです。
したがって、var_dump("MyClass"); と require './MyClass.class.php'; が関数内で実行されます。
結果は以下の通りです:
リーリー
オートロードには欠点があります: 繰り返し定義できないため (PHP 言語の特性)、チーム開発が必要な場合には不便であり、競合が発生しやすくなります。
そのため、PHP 5.1.2 以降には自動ロード登録関数 spl_autoload_register が存在します。この関数の手順は次のとおりです。
関数を SPL __autoload 関数キューに登録します。このキュー内の関数がまだアクティブになっていない場合は、アクティブにします。
複数のオートロード関数が必要な場合は、PHP 5.3 での名前空間の導入後、この関数のパラメーターはさまざまな形式になります:spl_autoload_register() がそのようなニーズを満たします。 実際には自動ロード関数のキューを作成し、定義された順序で 1 つずつ実行します。対照的に、
__autoload() は 1 回しか定義できません。
リーリー
以下は例です (上記の 4 つのフォームをテストしています):
リーリー
リーリー