この記事では主に、PHP SPL 標準ライブラリの共通関数の紹介について、spl_autoload_extensions()、spl_autoload_register()、spl_autoload() の 3 つの関数に焦点を当てます。友達も参考にできます
PHP SPL標準ライブラリは、自動ロード、イテレータ処理などの処理のためのいくつかの関数を提供します。
spl_autoload_extensions()は、spl_autoload()でロードできるファイル拡張子を追加します
spl_autoload_register() は、関数を SPL __autoload 関数スタックに登録します。
コードをコピーします。コードは次のとおりです:
/*test1.php*/
クラステスト1
{
}
/*test2.lib.php*/
クラステスト2
{
}
/*test.php*/
//ロード可能なクラスのファイル拡張子を設定します
spl_autoload_extensions(".php,.inc.php,.class.php,.lib.php");
// include_path を設定すると、自動ロードはこれらのパスでクラス ファイルを探します。PATH_SEPARATOR を通じて複数のパスを追加できます
Set_include_path(get_include_path().PATH_SEPARATOR.'libs/');
//パラメータは指定されず、デフォルトの実装関数は spl_autoload() です
spl_autoload_register();
$test1 = new Test1();
$test2 = new Test2();
spl_autoload() は __autoload() のデフォルト実装であり、include_path にファイル (.php/.inc) をロードします
コードをコピーします。コードは次のとおりです:
/*test1.php*/
クラステスト1
{
}
/*test.php*/
Set_include_path(get_include_path().PATH_SEPARATOR.'libs/');
spl_autoload('test1');
$test1 = new Test1();
spl_autoload_call() は、すべての spl_autoload_register 登録関数を呼び出してファイルをロードします
コードをコピーします。コードは次のとおりです:
/*test1.php*/
クラステスト
{
パブリック関数getFilename()
{
echo 'test1.php';
}
}
/*test2.lib.php*/
クラステスト
{
パブリック関数getFilename()
{
echo 'test2.lib.php';
}
}
/*test.php*/
関数ローダー($classname)
{
if($classname == 'Test1') {
__DIR__ が必要です;
}
if($classname == 'Test2') {
__DIR__ が必要です。 '/test2.lib.php';
}
}
spl_autoload_register('loader');
spl_autoload_call('Test2');
$test = new Test();
$test->getFilename(); //test2.lib.php
その他のSPL機能の紹介:
class_implements — 指定されたクラスによって実装されたすべてのインターフェイスを返します。
class_parents — 指定されたクラスの親クラスを返します。
class_uses — 指定されたクラスで使用される特性を返します
iterator_apply — イテレータ内の各要素に対してユーザー定義関数を呼び出します
iterator_count — イテレーター内の要素の数をカウントします
iterator_to_array — イテレータ内の要素を配列にコピーします
spl_autoload_functions — 登録されているすべての __autoload() 関数を返します
spl_autoload_unregister — 登録された __autoload() 関数の登録を解除します
spl_classes — 利用可能なすべての SPL クラスを返します
spl_object_hash — 指定されたオブジェクトのハッシュ ID を返します
イテレータ関連の関数を使用する場合:
コードをコピーします。コードは次のとおりです:
$iterator = new ArrayIterator (array( 'recipe' => 'pancakes' , 'egg' , 'milk' , 'flour' ));
print_r(iterator_to_array($iterator)) //イテレータ要素を配列に変換します
echo iterator_count($iterator); //イテレータ要素の数を計算する
print_r(iterator_apply($iterator, 'print_item', array($iterator)));//イテレータの各要素に対してカスタム関数を呼び出します
関数 print_item(Iterator $iterator)
{
echo strtoupper ( $iterator -> current ()) .
TRUE を返します ;}
) を中心に紹介します。