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 = 新しい Test1();
$test2 = 新しい 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 = 新しい 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__ が必要です;
}
}
spl_autoload_register('ローダー');
spl_autoload_call('テスト2');
$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)));//イテレータの各要素に対してカスタム関数を呼び出します
function print_item(Iterator $iterator)
{
echo strtoupper ( $iterator -> current ()) .
TRUE を返します ;
}