自動ロードの原理は、Zend_Application が Zend_Loader_Autoloader をインスタンス化し、 spl_autoload_register(array(__CLASS__, 'autoload')) を呼び出すことです。このようにして、クラスが見つからない場合は、このオブジェクトの autoload メソッドが呼び出されます。処理。
名前空間には複数のローダーを含めることができます。反復処理を行って一致するカスタム ローダーを見つけた後は、通常、名前空間にカスタム ローダーを登録するか、デフォルトのローダーを直接使用するだけになります。
名前空間を登録するには 2 つの方法があります:
- スペースのプレフィックスのみが登録され、ローダーは指定されず、登録メソッドは registerNamespace('スペース名') です。
- スペースプレフィックスを登録し、ローダーを指定します。登録メソッドは、pushAutoloader(loader, 'space name') または unshiftAutoloader(loader, 'space name') です。この 2 つのメソッドの違いは、push は指定されたスペース名のローダー キューの後にローダーを置き、unshift は前に置くことです。それ。
クラスが見つからずロードが必要な場合、そのクラス名は Zend_Loader_Autoloader::autoload() に渡され、次のプロセスが実行されます。
登録された名前空間のプレフィックスとそのような名前を比較して、名前空間で指定されたローダーを見つけます。 -
名前空間登録メソッドの 2 番目の名前プレフィックスとこのタイプの名前のプレフィックスを比較して、名前空間で指定されたローダーを見つけます。 -
名前空間登録メソッドの最初の名前プレフィックスと、このタイプの名前プレフィックスが存在する場合は、Zend のローダーを使用します。 -
このクラスに等しい名前空間プレフィックスがなく、FallbackAutoloader フラグが実際に設定されている場合は、Zend のローダーも使用されます。それ以外の場合はローダーが返されず、このクラスをロードできません。 -
ローダーが Zend_Loader_Autoloader_Interface インターフェースを実装するクラスの場合は、クラス名を autoload メソッドに渡してロードします。ローダーが関数の場合は、クラス名をこの関数のパラメーターとして使用してロードします。ローダーが配列の場合は、call_user_func コールバック関数を使用してロードします。
カスタマイズされたローダーは次の形式で提供されます:
Zend_Loader_Autoloader_Interface インターフェースを実装するオブジェクト-
リーリー
関数-
リーリー
コールバックを使用してオブジェクトまたはクラスのメソッドを呼び出します (関数 call_user_func)。
リーリー
-
Zend ローダー オブジェクトのメソッドは Zend_Loader_Autoloader::_autoload です。このメソッドは、call_user_func を使用して、デフォルトで array('Zend_Loader', 'loadClass') などの最終ロード メソッドを呼び出し、現在のオブジェクトをロードします。
http://www.bkjia.com/PHPjc/752435.html
www.bkjia.comtruehttp://www.bkjia.com/PHPjc/752435.html技術記事自動ロードの原理は、Zend_Application が Zend_Loader_Autoloader をインスタンス化し、 spl_autoload_register(array(__CLASS__, 'autoload')) を呼び出すことです。このようにして、クラスが見つからない場合、これが呼び出されます...