php マジック メソッド __autoload()、困っている友人はそれを参照できます。
__autoload() メソッドは、クラスのメソッドではなく、別の関数であり、クラスの外で宣言され、まだ宣言されていないクラスをインスタンス化するときに呼び出されます。
栗をあげるには:
require_once('test/A.php'); - require_once('test/C.php');
- $a = 新しい A();
- $b = 新しい B();
- $c = 新しい C();
-
- }
-
-
- コードをコピー
-
-
- このように書くと問題が発生します。条件 B でクラス B がインスタンス化されるとき、実際にはファイル A と C を参照する必要はありません。したがって、栗のメソッドは 2 つの「役に立たないファイル」A をコンパイルするためにリソースを無駄にします。 C. "class"; したがって、現時点では __autoload() 関数を使用してこの問題を解決できます。
-
function __autoload($className) { $filePath = “test/{$className}.php”; if (is_readable($filePath)) { require($filePath) } }
if (条件 A) { - $a = new A();
- $c = new C(); $b = 新しい B()
- }
-
-
- コードをコピーします
-
-
- PHP エンジンがクラス A を初めて使用するが見つからない場合、自動的に __autoload メソッドを呼び出し、クラス名「A」をパラメータとして渡します。したがって、クラス名に従って対応するファイルを見つけてインクルードする必要があります。メソッドがそれを見つけられない場合、PHP エンジンはエラーを報告します。ここでは require のみを使用できることに注意してください。これをインクルードすると、PHP エンジンが再びクラス A に遭遇したときに、__autoload を呼び出すのではなく、メモリ内のクラス A を直接使用するため、複数のインクルードが発生することはありません。
-
- それでは、オートロードの動作メカニズムについて説明しましょう。PHP がオブジェクトをインスタンス化するとき (実際には、インターフェイスを実装するとき、クラスでクラス定数や静的変数を使用するとき、またはクラスで静的メソッドを呼び出すとき)、最初にシステム内を検索します。クラス (またはインターフェイス) が存在するかどうかに関係なく、存在しない場合は、自動ロード メカニズムを使用してクラスをロードしてみます。自動ロードメカニズムの主な実行プロセスは次のとおりです:
-
- (1) executor グローバル変数関数ポインタ autoload_func が NULL かどうかを確認します。
-
(2) autoload_func==NULL の場合、__autoload() 関数がシステムに定義されているかどうかを確認します。定義されていない場合は、エラーを報告して終了します。
-
(3) __autoload() 関数が定義されている場合は、__autoload() を実行してクラスのロードを試み、ロード結果を返します。
(4) autoload_func が NULL でない場合は、autoload_func ポインタが指す関数を直接実行してクラスをロードします。このとき、__autoload()関数が定義されているかどうかはチェックしません。
php
|