コード例
コードのコピー コードは次のとおりです。
set_include_path(USVN_LIB_DIR . PATH_SEPARATOR . get_include_path()) ;
require_once 'Zend/Loader/Autoloader.php';
$autoloader_Autoloader::getInstance();
$autoloader->registerNamespace("Zend_"); ;registerNamespace( "USVN_");
$autoloader->registerNamespace("menus_");
$config = new USVN_CONFIG_FILE, USVN_CONFIG_SECTION); 🎜>プロセス分析
最初は、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_") を呼び出しました)、この関数が行うことは、キー USVN_ と値 true を持つ値を Zend_Loader_AutoLoader の内部属性 _namespaces にマウントすることだけです。
この関数を見ると、コードが
$autoloader->registerNamespace("Zend_")->registerNamespace("USVN_") または
$autoloader->registerNamespace(array("Zend_","USVN_"))
OK、今度は 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] => Array ( [ 0] => Zend_Loader [1] => ロードクラス ) [_fallbackAutoloader:protected] => 配列 *RECURSION* [_namespaces:protected] => 配列1 [ZendX_] => 1 [USVN_] => 1 [menus_] => 配列 () [_suppressNotFoundWarnings: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); つまり、Zend_Loader:loadClass("USVN_Config_Ini")
まず、AutoLoader.php で Zend_Loader が必要です。
次に、Zend_Loader を見てみましょう。このメソッドの最初のステップは、例外をチェックすることであり、スキップされます。 2 番目のステップは、クラスを分離し、USVN/Config/Ini.php などの $file にまとめることです。次に、self::loadFile($file, null, true);
を呼び出します。 check self: :loadFile,
まず、_securityCheck はクラス名に不正な文字が含まれているかどうかをチェックします。含まれていない場合は、$file が含まれます。もちろん、ここでの $file は相対パスであり、include_path がどこに設定されているか覚えていますか?プログラムの最初に設定してください。さて、これが読み込まれた USVN_Config_Ini クラスです。
これを見ればわかると思いますが、自分でクラスを定義して、USVN などの名前空間を登録する場合は、include_path の下に同じ名前のフォルダーを作成する必要があります (大文字と小文字は区別する必要があります)。導入された相対ファイル パス名は、クラス名の _ で区切られて読み込まれます。
これで AutoLoad メカニズムの説明は終わりです。