ホームページ  >  記事  >  バックエンド開発  >  Zend Framework の AutoLoad メカニズム_PHP チュートリアル

Zend Framework の AutoLoad メカニズム_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 10:58:39712ブラウズ

コード例

<ol class="dp-c">
<li class="alt"><span><span>set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path()); </span></span></li>
<li><span><span class="keyword">require_once</span><span> </span><span class="string">'Zend/Loader/Autoloader.php'</span><span>; </span></span></li>
<li class="alt"><span><span class="vars">$autoloader</span><span> = Zend_Loader_Autoloader::getInstance(); </span></span></li>
<li><span><span class="vars">$autoloader</span><span>->registerNamespace(</span><span class="string">"Zend_"</span><span>); </span></span></li>
<li class="alt"><span><span class="vars">$autoloader</span><span>->registerNamespace(</span><span class="string">"USVN_"</span><span>); </span></span></li>
<li><span><span class="vars">$autoloader</span><span>->registerNamespace(</span><span class="string">"menus_"</span><span>); </span></span></li>
<li class="alt"><span><span class="vars">$config</span><span> = </span><span class="keyword">new</span><span> USVN_Config_Ini(USVN_CONFIG_FILE, USVN_CONFIG_SECTION); </span></span></li>
</ol>

プロセス分析

まず、phpでincludeを呼び出す際にファイルを検索するアドレスであるinclude_pathを設定します

以下はrequire_once 'Zend/Loader/Autoloader.php';

In Zend/Loader /Autoloader.php ファイルでは、Zend/Loader.php が読み込まれます。この php には、loadClass、loadFile、isReadable (ファイルが読み取れるかどうか) などの関数が含まれています。 Zend_Loader_Autoloader をインスタンス化するには、関数のコンストラクターで spl_autoload_register(array(__CLASS__, 'autoload')); を呼び出します (ここでは、シングルトン モードが使用されます)。 _internalAutoloaderを独自の_autoloadに代入する操作も行いました

ここでのオートロードのやり方については、具体的な例を元に確認していきます

次に、この関数が何をしているのかというと、 Zend_Loader_Autoloader:registerNamespace("USVN_") です。 Zend_Loader_AutoLoader の内部属性 _namespaces にキー USVN_ と値 true の値をマウントするだけです。

この関数を見ると、コードが

$autoloader->registerNamespace("Zend_")->registerNamespace("USVN_")

または

$autoloader-> としても記述できることがわかります。 ;registerNamespace(array(" Zend_","USVN_"))

さて、USVN_Config_Ini クラスを呼び出します

このクラスは当然 Zend_Loader_Autoloader:autoload("USVN_Config_Ini") を呼び出します。 getClassAutoloaders は、このクラスの AutoLoader を取得します。 GetClassAutoloaders は、namespaceAutoloader の選択と判定を追加します。めったに使用しないため、ここではリターンローダーをスキップして、次のように出力します

Array ( [0] => Zend_Loader_Autoloader Object ( [_autoloaders:protected] => Array ( ) [_defaultAutoloader:protected] => 配列 ( [0] => Zend_Loader [1] =>loadClass ) [_fallbackAutoloader:protected] => 配列 *RECURSION* [_namespaces :protected] => 配列 ( [Zend_] => 1 [ZendX_] => 1 [USVN_] => 1 [menus_] => 1 ) [_namespaceAutoloaders:protected] => 配列 ( ) [_suppressNotFoundWarnings :protected] => [_zfPath:protected] => ) [1] => _autoload )

は、実際には前に設定した _internalAutoloader です。

Zend_Loader_Autoloader:_autoload ("USVN_Config_Ini") は実際にここで呼び出されます

さて、Zend_Loader_Autoloader:_autoload 関数が表示されました

$callback = $this->getDefaultAutoloader();

デフォルトのオートローダーはここで取得されます、デフォルトのオートローダーは何ですか? このクラスの初期定義を見ると、実際には array('Zend_Loader', 'loadClass'); です

以下の自然な呼び出しは call_user_func($callback, $class); です。 :loadClass(" USVN_Config_Ini")

まず、AutoLoader.php では Zend_Loader が必要です

次に、Zend_Loader:loadClass メソッドを見てみましょう。このメソッドの最初のステップは、例外をチェックしてスキップすることです。 。 2 番目のステップは、クラスを分離し、USVN/Config/Ini.php などの $file に結合することです。次に、self::loadFile($file, null, true);

を直接呼び出します。次に、self を確認します。 :loadFile。最初の _securityCheck は、クラス名に不正な文字が含まれているかどうかをチェックします。含まれていない場合は、$file が含まれます。もちろん、ここでの $file は相対パスであり、include_path がどこに設定されているか覚えていますか?プログラムの最初に設定してください。さて、これが読み込まれた USVN_Config_Ini クラスです。

これを見れば分かると思いますが、自分でクラスを定義して、USVNなどのNamespaceを登録する場合は、include_pathの下に同じ名前のフォルダを作成して(大文字と小文字を区別する必要があります)、インポートする必要があります。相対ファイルパス名はクラス名の_で区切られて読み取られます。

これで AutoLoad メカニズムの説明は終わりです。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445667.html技術記事コード例 set_include_path(USVN_LIB_DIR.PATH_SEPARATOR.get_include_path()); $autoloader =Zend_Loader_Autoloader::getInstance();
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。