ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルでの SPL spl_autoload_register および __autoload メソッドの使用
PHP では、spl_autoload_register メソッドと __autoload メソッドは PHP5 でのみ使用できます。これら 2 つの魔法の関数の使用方法について詳しく説明します。
spl_autoload_register() 関数は、主流のフレームワークで最も使用されている非常に中心的な関数の 1 つであり、関数とクラスを自動的に登録し、__autoload() に似た関数を実装し、クラスの呼び出しと読み込みを簡素化し、作業効率を向上させることができます。 。
サポートされているバージョン: PHP 5 >= 5.1.2
効率の問題に関しては。 PHP マニュアルには次のように書かれています:
bool spl_autoload_register ([ callback $autoload_function ] )
関数を SPL __autoload 関数スタックに登録します。このスタック内の関数がまだアクティブになっていない場合は、アクティブにします。 __autoload 関数がプログラムに実装されている場合は、__autoload スタックに明示的に登録する必要があります。 spl_autoload_register() 関数は、Zend Engine の __autoload 関数を spl_autoload() または spl_autoload_call() に置き換えるためです。
spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register — __autoload() 関数を登録する
説明
bool spl_autoload_register ([ callback $autoload_function ] )
関数を SPL __autoload 関数スタックに登録します。このスタック内の関数がまだアクティブになっていない場合は、アクティブにします。
__autoload 関数がプログラムに実装されている場合は、__autoload スタックに明示的に登録する必要があります。なぜなら
spl_autoload_register() 関数は、Zend Engine の __autoload 関数を spl_autoload() または
に置き換えます。
spl_autoload_call()。
パラメータ
自動ロード関数
登録するオートロード関数。パラメーターが指定されていない場合、autoload のデフォルト実装関数が自動的に登録されます
spl_autoload()。
戻り値
成功した場合は TRUE、失敗した場合は FALSE を返します。
注: SPL は、Standard PHP Library の略称です。これは、PHP5 で導入された拡張ライブラリであり、その主な機能には、オートロード メカニズムとさまざまな Iterator インターフェイスまたはクラスの実装が含まれます。 SPL オートロード メカニズムは、関数ポインタ autoload_func をオートロード関数を持つ自己実装関数にポイントすることによって実装されます。 SPL には、spl_autoload と spl_autoload_call という 2 つの異なる関数があります。これら 2 つの異なる関数アドレスを autoload_func に指定することで、異なる自動ロード メカニズムが実装されます。
コードは次のとおりです | コードをコピー |
クラスの自動ロード |
さらに:
__autoload メソッドは、autoload_func 関数ポインタがすでに spl_autoload メソッドを指しているため、spl_autoload_register の後は無効になります
* 次の方法で _autoload メソッドを autoload_functions リストに追加できます
spl_autoload_register( '__autoload' );
カスタム読み込みメソッドを使用することもできます:
最初の関数式:
コードは次のとおりです | コードをコピー |
関数 my_own_loader($classname) |
2 番目のタイプ:
コードは次のとおりです | コードをコピー |
クラスローダー |
例: CI フレームワークがクラスローディングを実装すると、それに対応するモデルも生成されます。
コードは次のとおりです | コードをコピー |
静的パブリック関数 myAutoload($class){ |
もちろん、上記は最も単純なデモにすぎません。__autoload は include_path に移動してクラス ファイルを見つけ、それをロードするだけです。必要に応じて __autoload のルールを定義できます。
さらに、自動ロード時に __autoload を呼び出すのではなく、独自の関数 (またはクラス メソッド) を呼び出したい場合は、 spl_autoload_register を使用して独自の autoload 関数を登録できます。その関数プロトタイプは次のとおりです:
bool spl_autoload_register ( [callback $autoload_function] )
上記の例を書き直してみましょう:
コードは次のとおりです | コードをコピー |
クリップボード印刷へのプレーンコピーを表示しますか? spl_autoload_register('ローダー'); $a = 新しい A();
関数ローダー($class)
{ $a = 新しい A();
|
コードをコピー | |
クリップボード印刷へのプレーンコピーを表示しますか?
クラスローダー $a = 新しい A();
|
http://www.bkjia.com/PHPjc/445632.html