ホームページ > バックエンド開発 > PHPチュートリアル > PHP SPL の使用方法とその power_PHP チュートリアル

PHP SPL の使用方法とその power_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:25:17
オリジナル
1159 人が閲覧しました

SPL、PHP 標準ライブラリ (標準 PHP ライブラリ)、この組み込みコンポーネントとインターフェイスは PHP 5.0 から組み込まれており、PHP5.3 から徐々に成熟してきました。 SPL は実際にはすべての PHP5 開発環境に組み込まれており、セットアップは必要ありません。
多くの PHP 開発者は基本的に PHP を使用していないか、聞いたことさえないようです。その理由は、「存在」を無視してしまう雪のような文書にあります。 SPL この宝石は、海底に沈んだタイタニック号の「海の心臓」のようなものです。今、それは私たちによって手に取られ、しかるべき場所で着用されるべきであり、これがこの記事で表現されている観点です。
では、SPL は何を提供するのでしょうか?
SPL は、配列形式でオブジェクトを操作するために使用される ArrayAccess、Countable、SeekableIterator などのインターフェイスを備えた PHP エンジンの拡張機能を提供します。同時に、RecursiveIterator や ArrayObjects などの他のイテレータを使用してデータを反復することもできます。
また、Exceptions、SplObserver、Spltorage などのいくつかの組み込みオブジェクトや、対応する関数をオーバーロードするための splautoloadregister、splclasses、iteratorapply などのヘルパー関数もあります。
これらのツールを組み合わせると、多機能のスイスアーミーナイフのようなものになります。これらをうまく活用すると、PHP コードの効率が質的に向上します。では、どうすればその力を発揮できるのでしょうか?
オートローダーのオーバーロード
あなたが「教科書的なプログラマー」であれば、__autoload を使用して include/requires 操作を置き換え、対応するクラスを遅延ロードする方法を知っているはずですよね?
しかし、時間が経つと、まず、クラス ファイルが指定されたファイル パスに存在する必要があることを確認する必要があります。たとえば、Zend フレームワークでは、クラスを区切るのに「_」を使用する必要があります。およびメソッド名 (この問題をどのように解決しますか?)。
もう 1 つの問題は、プロジェクトがますます複雑になるにつれて、__autoload 内のロジックもそれに応じて複雑になることです。最終的には、例外判定も追加し、クラスをロードするロジックをすべて書き込むことになります。
「卵は 1 つのカゴに入れることができない」ことは誰もが知っています。SPL を使用して __autoload のロード ロジックを分離できます。独自の自動ロード関数を作成し、SPL が提供する関数を使用してそれをオーバーロードするだけです。
たとえば、上記の Zend フレームワークの問題では、対応するクラスが見つからない場合は、Zend ローダーの対応するメソッドをオーバーロードできます。その後、以前に定義した関数が使用されます。コードをコピー

コードは次のとおりです。 spl_autoload_register( array('MyLoader', 'doAutoload') );?>
ご覧のとおり、spl autoload register は複数のロード ロジックを配列の形式で追加することもできます。同時に、spl autoload unregister を使用して、不要になったロード ロジックを削除することもできます。この機能は常に使用されます。
イテレーター
イテレーションは一般的な設計パターンの 1 つであり、データ セット内の統合走査操作によく使用されます。 SPL は、対応するデータ型に必要なイテレータをすべて提供すると言っても過言ではありません。
非常に良い例は、ディレクトリの走査です。従来のアプローチでは、scandir を使用し、「.」と「..」、および条件を満たさないその他のファイルをスキップします。たとえば、画像ファイルを抽出するためにディレクトリを移動する必要がある場合、画像ファイルが jpg で終わるか gif で終わるかを判断する必要があります。
次のコードは、SPL のイテレーターを使用して、指定されたディレクトリ内の画像ファイルに対する上記の再帰的検索を実行する例です:


コードをコピーします


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


class RecursiveFileFilterIterator extends FilterIterator {
// 条件を満たす拡張子
protected $ext = array('jpg','gif');
/**
* $path を指定し、対応するディレクトリ イテレータを生成します
*/
public function __construct( $path) {
parent ::__construct(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)));
}
/**
* ファイル拡張子が条件を満たしているか確認してください
*/
public function accept() {
$item = $this->getInnerIterator " }
}
}
// Instantiate
foreach (new RecursiveFileFilterIterator('/​​path/to/something') as $item) {
echo $item . PHP_EOL;
}
?>


次のように言うかもしれません。これは花ではありません 同じことを行うのにさらにコードが必要ですか?では、上記のコードを見てください。再利用可能でテストしやすいコードではないでしょうか :)


http://www.bkjia.com/PHPjc/825141.html

www.bkjia.com

http://www.bkjia.com/PHPjc/825141.html技術記事 SPL、PHP 標準ライブラリ (標準 PHP ライブラリ) は、PHP 5.0 から始まる組み込みコンポーネントおよびインターフェイスであり、PHP 5.3 から徐々に成熟してきました。 SPL は実際にはすべての PHP5 開発環境に組み込まれています...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート