私は標準 PHP ライブラリ (SPL) を調べています。以前は配列だけを使用していましたが、PHP には非常に多くの標準クラスがあることを今知りました。しかし、マニュアルには、それを使用することが推奨されているかどうかについて何も書かれていません。たとえば、foreach
配列を反復処理するには、より高速であるため、コンストラクションを使用することを明示的に推奨しています。では、このライブラリはどうでしょうか。オブジェクトにデータを保存する必要がある場合、状況に応じて具体的な SPL クラスを使用する必要があるのでしょうか。それとも、標準配列を使用する方がよいのでしょうか。
ベストアンサー1
質問には多くの内容が含まれています。SPL データ構造を使用する必要があるでしょうか? それは状況によります。
PHP配列はマップ、リンクリスト、配列として機能します。これらすべての機能を果たす単一のデータ型が必要になることはほとんどないでしょう。同時にしたがって、SPL データ型の集中的な性質はそれほど制限的ではありません。実際、ほとんどの「部外者」(および一部の「部内者」) は、PHP の配列を茶番と見なします。
PHP の配列の主な欠点は、大量のメモリを使用することです。固定された連続したインデックス付き配列が必要な場合でも、リンクされたものとキーのストレージのオーバーヘッドが発生します。それにもかかわらず、主にデータを追加して反復処理する場合、PHP の配列は通常、オブジェクト型よりもはるかに高速です。これはおそらく関数呼び出しによって処理が遅くなるためです。
一般的に、SPL データ構造を使用する人はあまりいません。その理由の大部分は、PHP や Web アプリケーションのコンテキストでは、SPL データ構造があまり適用できないためだと思います。通常は小さな配列を扱うので、組み込み演算子や配列関数の利便性が SPL 型の利点を上回ります。
そうは言っても、
配列をリンク リストとして使用する (途中で挿入/削除する) 状況に陥った場合は、SPL の二重リンク リストのいずれかを試してください。
大きなインデックス配列を使用している場合は、 を試してください
SPLFixedArray
。メモリの消費量が大幅に削減されます。オブジェクトをキーとするマップが必要な場合は、 を使用します
SplObjectStorage
(PHP 配列はオブジェクト キーでは機能しないため)。データを配列内で順序付けたままにしたい場合は、ヒープのいずれかを試してください。
ネイティブ配列と SPL オブジェクトをベンチマークし、メモリ + 速度 + シンプルさのトレードオフが自分に適したものを使用します。