ホームページ  >  記事  >  php教程  >  [PHP] __autoload() マジック メソッドと spl_autoload_register

[PHP] __autoload() マジック メソッドと spl_autoload_register

WBOY
WBOYオリジナル
2016-09-02 08:42:55929ブラウズ

参考リンク:

1. spl_autoload_registerとautoloadの違いの詳しい説明

2. php.net自動読み込みクラス

多くの開発者は、オブジェクト指向アプリケーションを作成するときに、クラス定義ごとに PHP ソース ファイルを作成します。大きな煩わしさは、各スクリプトの先頭にインクルード ファイルの長いリスト (クラスごとに 1 つのファイル) を記述しなければならないことです。

PHP 5 では、これは必要なくなりました。まだ定義されていないクラスを使用しようとしたときに自動的に呼び出される __autoload() 関数を定義できます。この関数を呼び出すことにより、スクリプト エンジンは、PHP がエラーで失敗する前に、必要なクラスをロードする最後のチャンスを得ることができます。

簡単なインポート例:

まず、新しいクラス ファイル MyClass.class.php を作成します。

リーリー

同じディレクトリに任意の名前で新しい php ファイルを作成します:

リーリー
ここでは、必要なコンテンツが __autoload() に配置されています。この関数が定義されていない場合は、MyClass クラスが見つからないことを示す致命的なエラー (Fatal) が報告されます。

このマジックメソッドが定義されている場合

新しいオブジェクトが見つかり、現在のコードでクラス定義が見つからない場合(上記の2つの条件が満たされている場合)、__autoload()関数がクラス名パラメータと関数に渡されます。実行されるコードスニペットです。

したがって、var_dump("MyClass"); と require './MyClass.class.php'; が関数内で実行されます。

結果は以下の通りです:

リーリー

var_dump の内容と 2 つのコンストラクター エコーの内容がここに出力されます。 require が入って新しい MyClass が再度作成された場合、__autoload() 関数は再度呼び出されないことが証明できます。

オートロードには欠点があります: 繰り返し定義できないため (PHP 言語の特性)、チーム開発が必要な場合には不便であり、競合が発生しやすくなります。

そのため、PHP 5.1.2 以降には自動ロード登録関数 spl_autoload_register が存在します。この関数の手順は次のとおりです。

関数を SPL __autoload 関数キューに登録します。このキュー内の関数がまだアクティブになっていない場合は、アクティブにします。

複数のオートロード関数が必要な場合は、

spl_autoload_register() がそのようなニーズを満たします。 実際には自動ロード関数のキューを作成し、定義された順序で 1 つずつ実行します。対照的に、

__autoload() は 1 回しか定義できません。

PHP 5.3 での名前空間の導入後、この関数のパラメーターはさまざまな形式になります:

リーリー

この関数は、新しいオブジェクトの前にのみ呼び出す必要があります。

以下は例です (上記の 4 つのフォームをテストしています):

リーリー

出力結果は以下の通りです(検索順は登録順と同じなので注意してください)。

リーリー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。