23

標準 PHP ライブラリ (SPL) を調べています。以前は配列しか使用していませんでしたが、PHP には非常に多くの標準クラスがあることがわかりました。しかし、それを使用することが推奨されているかどうかについて、マニュアルには何の言葉もありません。たとえば、foreach構築を使用して配列を反復処理することを明示的に推奨しています。そして、このライブラリはどうですか?オブジェクトにデータを格納する必要がある場合、状況に合わせて具体的な SPL クラスを使用する必要がありますか、それとも標準配列を使用する方がよいでしょうか?

4

1 に答える 1

36

あなたの質問にはたくさんあります。SPL データ構造を使用する必要がありますか? 場合によります。

PHP 配列は、マップ、リンク リスト、または配列として機能できます。単一のデータ型が実際にこれらすべての機能を同時に必要とすることはめったにないため、SPL データ型の焦点を絞った性質はそれほど制限的ではありません。実際、ほとんどの「アウトサイダー」(および一部の「インサイダー」) は、PHP の配列を茶番だと考えるでしょう。

PHP の配列の主な欠点は、大量のメモリを使用することです。固定されたシーケンシャルなインデックス付き配列が必要なだけの場合でも、リンクされたものとキーのストレージのオーバーヘッドがあります。それにもかかわらず、PHP の配列は、おそらく関数呼び出しが遅くなるため、ほとんどの場合、データを追加してそれを反復処理する場合、オブジェクト型よりもはるかに高速です。

一般に、SPL データ構造を使用している人はあまり見かけません。ほとんどの場合、PHP および Web アプリケーションのコンテキストでは、それらは一般的にあまり適用されないためです。通常、組み込み演算子と配列関数の利便性が SPL 型の利点を上回る小さな配列を扱っています。

それは言った:

  • 配列を連結リスト (途中で挿入/削除) として使用している場合は、SPL 二重連結リストのいずれかを試してください。

  • 大きなインデックス付き配列を使用していることに気付いた場合は、SPLFixedArray. それらは間違いなくはるかに少ないメモリを消費します。

  • オブジェクトをキーとしてマップする必要がある場合は、a を使用しますSplObjectStorage(PHP 配列はオブジェクト キーでは機能しないため)。

  • 配列内でデータの順序を維持したい場合は、ヒープの 1 つを試してください。

ネイティブ配列と SPL オブジェクトのベンチマークを行い、メモリ + 速度 + シンプルさのトレードオフが適切な方を使用してください。

于 2012-07-08T05:22:29.700 に答える