PHP を理解するパート 3: PHP の自動クラスローディング [転送]
リダイレクト: http://www.liuhui.info/article78.html
?
spl_autoload_register() 関数は、主流のフレームワークで最もよく使用される非常に中心的な関数の 1 つであり、__autoload() と同様に、関数とクラスを自動的に登録できます。
クラスの呼び出しや読み込みを簡素化し、作業効率を向上させる機能です。この機能の特徴を実験を通して説明します。
関数プロトタイプ
bool spl_autoload_register
? ([? callback $autoload_function? [,? bool $throw = true? [,? bool $prepend = false? ]]] )
互換性のあるバージョン
PHP 5 >= 5.1.2
?
最初のステップは、spl_autoload_register() 関数を使用してload() メソッドを登録することです
<?php function load(){ require_once 'lib.php'; } spl_autoload_register('load'); ?>
?lib.php ファイルのコードは次のとおりです:
<?php class className{ function method(){ echo 'a method in class'; } } function onlyMethod(){ echo 'method only'; } ?>
?説明: lib.php ファイルは className クラスであり、onlyMethod 関数です。
注: 自動ロードによってロードされた PHP ファイルにはクラス定義が含まれている必要があります。
?
2 番目のステップは、自動読み込みクラスを呼び出すことです
$class = new className(); $class->method(); onlyMethod();
?出力は次のとおりです: クラス
のメソッド
??????????メソッドのみ
?
3 番目のステップは、関数を直接呼び出すことです
onlyMethod();
注: インスタンス化されたクラスはありません。lib.php ファイルのonlyMethod() 関数を直接呼び出してください。
出力:
致命的なエラー
: '...(パス省略)'
?
4 番目のステップでは、className クラスをインスタンス化し、それを直接呼び出します
$class = new className(); onlyMethod();
出力: メソッドのみ
上記の 4 段階の実験から、ロードされたファイルに関数が含まれている場合、内部のクラスをインスタンス化する必要があることがわかりました。そうしないと、未定義関数呼び出しエラーが発生します。使用する場合は注意してください。
?
?
?
?
?
?