ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルの spl_autoload の詳細な説明

php_PHP チュートリアルの spl_autoload の詳細な説明

WBOY
WBOYオリジナル
2016-07-13 10:16:44888ブラウズ

phpのspl_autoloadの詳しい説明

spl_autoloadはSPLが実装するデフォルトの自動ロード機能で、機能は比較的シンプルです。 2 つのパラメータを受け取ることができます。最初のパラメータはクラス名を表します。2 番目のパラメータ $file_extensions は、クラス ファイルの拡張子名を表します。 $file_extensions" title="拡張子">拡張子名で複数の拡張子を指定します。セミコロンで区切ってください。指定しない場合は、デフォルトの拡張子" title="拡張子名"> 拡張子 .inc または .php が使用されます。 spl_autoload は、まず $class_name を小文字に変更し、次にすべてのインクルード パスで $class_name.inc または $class_name.php ファイルを検索し、見つかった場合はクラス ファイルを手動でロードします。実際、複数の拡張子を指定できる点を除けば、spl_autoload("person", ".class.php") を使用します。

spl_autoload を自動的に動作させる、つまり autoload_func を spl_autoload にポイントする方法は?答えは、spl_autoload_register 関数を使用することです。 PHP スクリプトで初めてパラメータを指定せずに spl_autoload_register() を呼び出すと、autoload_func を spl_autoload に指定できます。

上記の説明を通じて、spl_autoload の機能は比較的単純であり、SPL 拡張機能で実装されており、その機能を拡張できないことがわかりました。独自のより柔軟な自動読み込みメカニズムを実装したい場合はどうすればよいでしょうか?この時点で、spl_autoload_call 関数がデビューします。

まず、spl_autoload_call の実装の素晴らしい機能を見てみましょう。 SPL モジュール内には、本質的に HashTable であるグローバル変数 autoload_functions がありますが、リンク リスト内の各要素は、次の機能を持つ関数を指す関数ポインターであると単純に考えることができます。クラスの自動ロード機能。 spl_autoload_call の実装自体は非常に単純で、リンクされたリスト内の各関数を順番に実行し、各関数の実行後に必要なクラスがロードされたかどうかを判断し、ロードが成功した場合はそのままリターンします。リンクされたリストの他の機能を実行し続けます。このリンクされたリスト内のすべての関数が実行された後でクラスがロードされていない場合、spl_autoload_call はユーザーにエラーを報告せずに直接終了します。したがって、オートロード メカニズムを使用しても、クラスが自動的に正しくロードされることは保証されません。キーはオートロード関数の実装方法に依存します。

php5 の標準ライブラリ メソッド spl_autoload は、独自の __autoload を実装するのと同等です

コードは次のとおりです:

関数 __autoload($classname){
if(is_file($classname.'.php'){
include $classname.'.php';
} elseif(is_file($classname.'.inc'){
$classname.'.inc';
を含めます }
}

登録ディレクトリ内で $classname と同じ名前の .php/.inc ファイルが自動的に検索されます。もちろん、拡張子を登録することで特定の種類のファイルを指定することもできます

コードは次のとおりです:

spl_autoload_extensions('.php,.inc,.some');

この方法では、.some ファイルも検索されます。デフォルトでは、php は spl_autoload を開始しません。では、spl_autoload を自動的に有効にするにはどうすればよいでしょうか?その方法は

コードは次のとおりです:

spl_autoload_register();

spl_autoload_register には $callback パラメータがあり、指定しない場合は、さらに自動ロード ディレクトリを検索するために、これらのコードの前に自動ロード ディレクトリを設定できます

コードは次のとおりです:

set_include_path(get_include_path() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);

このように、phpは指定されたクラスが見つからない場合、set_include_pathで指定されたディレクトリ内を検索します。

これらのメソッドは php フレームワークで一般的に使用されます。たとえば、上記の紹介文をつなぎ合わせます:

コードは次のとおりです:

set_include_path(get_include_path() . PATH_SEPARATOR . 'some/path' . DIRECTORY_SEPARATOR);
spl_autoload_extensions('.php,.inc,.some');
spl_autoload_register();

some/path の下に classA クラスをロードする場合、ディレクトリ内で classa.php または classa.inc または classa.some が検索されるため、新しい classA を安全に使用したり、classA を拡張したりできます

コードは次のとおりです:

ClassB は ClassA を拡張します {
// コード..
}

$a = 新しいクラスA;
$b = 新しいクラス B;

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/896774.html技術記事 spl_autoloadのphpでの詳しい説明 spl_autoloadはSPLが実装するデフォルトの自動ロード機能で、機能は比較的シンプルです。 2 つのパラメーターを受け取ることができます。最初のパラメーターはクラス名を表します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。