PHP の忘れられた宝石 SPL_PHP チュートリアル
Rafael Dohms による上記の記事は私を非常に驚かせたので、翻訳して内容を追加せずにはいられませんでした。
SPL、PHP 標準ライブラリ (標準 PHP ライブラリ) は、PHP 5.0 から始まる組み込みコンポーネントおよびインターフェイスであり、PHP 5.3 から徐々に成熟してきました。 SPL は実際にはすべての PHP5 開発環境に組み込まれており、セットアップは必要ありません。
多くの 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 は、配列の形式で複数のロード ロジックを追加することもできます。同時に、spl autoload unregister を使用して、不要になった読み込みロジックを削除することもできます。この機能は常に使用されます。
イテレータ
反復は、一連のデータ内の統一された走査操作に一般的に使用される一般的な設計パターンの 1 つです。 SPL は、対応するデータ型に必要なイテレータをすべて提供すると言っても過言ではありません。
非常に良い例は、ディレクトリの走査です。従来のアプローチでは、scandir を使用し、「.」と「..」、および条件を満たさないその他のファイルをスキップします。たとえば、画像ファイルを抽出するためにディレクトリを移動する必要がある場合、画像ファイルが jpg で終わるか gif で終わるかを判断する必要があります。
次のコードは、SPL のイテレータを使用して上記の再帰を実行し、指定されたディレクトリで画像ファイルを検索する例です。 れーれー
同じことを行うのに、より多くのコードが必要になるのではないか、と思われるかもしれません。では、上記のコードを見てください。再利用可能でテストしやすいコードではないでしょうか :)
SPL が提供する他のイテレータは次のとおりです:
- RecursiveIterator
- RecursiveIteratorIterator
- OuterIterator
- IteratorIterator
- FilterIterator
- RecursiveFilterIterator
- ParentIterator
- SeekableIterator
- LimitIterator
- GlobIterator
- CachingIterator
- Recurs iveCachingIterator
- NoRewindIterator
- AppendIterator
- RecursiveIteratorIterator
- InfiniteIterator
- RegexIterator
- RecursiveRegexIterator
- EmptyIterator
- RecursiveTreeIterator
- ArrayIterator
-
PHP5.3 からは、さらに多くの組み込みイテレーターが追加されるので、これを試してみると、従来のコードを書く習慣が変わるかもしれません。
では、どの程度の速度なのかは、次のデータで一目瞭然です。
多くの配列操作が必要な場合は、それを試してみて、それが信頼できると確信できます。
データ構造
同時に、SPL はいくつかの基本的なタイプのデータ構造の実装も提供します。配列を使用してスタック (Strack) を記述するなど、従来の変数型を使用してデータ構造を記述することはできますが、対応するポップとプッシュのメソッド (arraypop()、arraypush()) を使用する必要があります。結局のところ、それらはデータ構造を記述するように特別に設計されていないため、常に注意してください。1 つの間違った操作によってスタックが破壊される可能性があります。
SPL の SplStack オブジェクトは、データをスタックの形式で厳密に記述し、対応するメソッドを提供します。同時に、そのようなコードは、配列ではなくスタック上で動作していることも理解できる必要があり、ピアが対応するコードをよりよく理解できるようになり、処理が高速化されます。
最後に、おそらく上記の淡い例は、SPL を使用する「誘惑」には十分ではありません。実践することで真の知識が得られ、SPL のさらに強力な機能を自分で探索する必要があります。宝石のようにゆっくりと彫られて初めて輝きを放ちます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
