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

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

WBOY
WBOYオリジナル
2016-07-21 15:15:26719ブラウズ

コード例

コードをコピーします コードは次のとおりです:

set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Loader/Autoloader.php';ローダー = Zend_Loader_Autoloader:: getInstance() ;
$autoloader->registerNamespace("Zend_");
$autoloader->registerNamespace("menus_"); USVN_CONFIG_FILE, USVN_CONFIG_SE CTION );



プロセス分析

まず、phpでincludeを呼び出す際にファイルが検索されるアドレスであるinclude_pathを設定します
以下はrequire_once 'Zend/Loader/Autoloader.php'です。 ;

Zend/Loader 内 /Autoloader.php ファイルでは、Zend/Loader.php が読み取られます。このクラスには、loadClass、loadFile、isReadable (ファイルが読み取り可能かどうか) およびその他の関数が含まれます。 Zend_Loader_Autoloader をインスタンス化するプロセスは、それを呼び出します。 コンストラクターのプロセス (ここではシングルトン モードが使用されます)

spl_autoload_register(array(__CLASS__, 'autoload')); は、コンストラクター内のクラス自動ロード関数として Zend_Loader_Autoloader: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 オブジェクト ( [_autoloaders:protected] => 配列 ( ) [_defaultAutoloader:protected] => 配列 ( [0] => Zend_Loader [1] =>loadClass ) [_fallbackAutoloader:protected] => ; [_internalAutoloader:protected] => 配列 *RECURSION* [_namespaces:protected] => 配列 ( [Zend_] => 1 [ZendX_] => 1 [USVN_] => 1 [menus_] => 1 ) [_namespaceAutoloaders:protected] => 配列 ( ) [_suppressNotFoundWarnings:protected] => [1] =>

実際、これは前に設定した _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 メカニズムの説明は終わりです。


http://www.bkjia.com/PHPjc/326120.html

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