PHPのspl_autoload_register関数の使用法、splautoload
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_function
登録されるオートロード関数。パラメータを指定しない場合、autoload のデフォルト実装関数が自動的に登録されます。
spl_autoload()。
戻り値 成功した場合は TRUE、失敗した場合は FALSE を返します。
注: SPL は標準 PHP です
Library(標準PHPライブラリ)の略称。これは、PHP5 で導入された拡張ライブラリであり、その主な機能には、オートロード メカニズムとさまざまな Iterator インターフェイスまたはクラスの実装が含まれます。
SPL
オートロード機構の実装は、関数ポインタ autoload_func を自身で実装したオートロード関数を持つ関数を指すことで実現します。 SPL には 2 つの異なる機能があります
spl_autoload、
spl_autoload_call は、autoload_func をこれら 2 つの異なる関数アドレスに指すことで、さまざまな自動ロード メカニズムを実装します。
例
A という名前のクラスを定義するクラス ファイル A.php があるとします。
clipboardprint への plaincopy の表示?
class A
{
public function __construct()
{
echo '了解しました。'
}
}
そして、このクラスAを使用する必要があるindex.phpがあります。従来の記述方法は
です。
クリップボードにプレーンコピーを表示します?
require('A.php');
$a = new A();
しかし、1 つの問題は、index.php にクラス A だけでなく多くのクラスを含める必要がある場合、何行もの require ステートメントを書かなければならず、それが時々人々を不快にさせることです。
しかし、php5 以降のバージョンでは、これを行う必要はなくなりました。 php5 では、定義されていないクラスを使用しようとすると __autoload 関数が自動的に呼び出されるため、インクルード ファイルの長いリストを作成しなくても、php がクラスを自動的にロードできるように __autoload 関数を作成できます。
たとえば、上記の例では、index.php は次のように記述できます:
クリップボードプリントへのプレーンコピー?
function __autoload($class)
{
$file = $class .php';
if (is_file($file)) {
require_once($file); }
}
$a = 新しい A();
もちろん、上記は最も単純なデモです。__autoload は include_path に移動してクラス ファイルを見つけ、それをロードするだけです。必要に応じて __autoload のルールを定義できます。
さらに、自動ロード時に __autoload を呼び出すのではなく、独自の関数 (またはクラス メソッド) を呼び出したい場合は、 spl_autoload_register を使用して独自の autoload 関数を登録できます。その関数のプロトタイプは次のとおりです:
bool spl_autoload_register ( [callback $autoload_function] )
上記の例を書き直してみましょう:
クリップボードプリントへのプレーンコピー?
関数ローダー($class)
{
$file = $class .php'
if (is_file($file)) {
require_once($file);
$a = 新しい A();
この時点でも、PHP がクラスを探すとき、__autoload を呼び出すのではなく、独自に定義した関数ローダーを呼び出します。同様の理由で、以下のような書き方も可能です
クリップボードにプレーンコピーを表示?
クラスローダー
{
パブリック静的関数loadClass($class)
{
$file = $class .php'
if (is_file($file)) {
require_once($file);
}
}
}
spl_autoload_register(array('Loader', 'loadClass'));
$a = new A();
http://www.bkjia.com/PHPjc/988859.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/988859.html技術記事 PHP での spl_autoload_register 関数の使用法、splautoload spl_autoload_register (PHP 5 = 5.1.2) spl_autoload_register register__autoload() 関数の説明 bool spl_autoload_register ([ ca...