0

より上級の PHP プログラマーから、PHP 配列の使用は余分なデータのコピーが発生するため非効率的であると説明されました。彼は次に、データ (配列であっても) を保持するクラスを作成することで、メモリの消費を抑え、パフォーマンスを向上させると説明しました。PHP は、配列の配列のように、クラス内のデータをコピー/ディープ コピーする必要はありません。

彼はまた、私が探しているオブジェクトは、配列の配列よりも適切に構造化されたオブジェクトのツリーで見つけやすいと説明しました。これは理解できます。

ここに質問がありますが、それらが少し曖昧であることはわかっています。

  • オブジェクトに対して配列の配列を使用してデータを格納する適切な状況はありますか?

  • オブジェクトにデータを格納する方が、常にメモリ効率とパフォーマンス効率が向上しますか?

事前に感謝します。私はそれを理解するためにたくさんのPHPアプリを書いてプロファイリングすることができましたが、あなたの多くはすでに答えを知っていると確信しています.

4

3 に答える 3

1

メモリ消費/ディープコピーの違いは、デフォルトで配列が値によって関数に渡され(したがって、配列がコピーされている)、オブジェクトが参照によって渡されるという事実に起因します。配列を参照で渡すこともできるので(引数が参照であると明示的に示す- function foo(& $bar))、配列とクラスのメモリ使用量に大きな違いはありません。他に述べたように、意味的に正しい方法で配列/オブジェクトを使用する必要があります。PHPは提供しておらず、struct構造化データを保持するためのクラスを使用する方が、有効な実際のキーを宣言できるため、連想配列よりも優れていることがよくあります。ただし、配列とクラスを選択する理由は、パフォーマンス上の理由ではありません。

于 2012-05-20T21:36:07.767 に答える
1

この男はテストを行いましたが、大きな違いはないようです: http://www.rooftopsolutions.nl/blog/148

于 2012-05-20T18:19:53.633 に答える
1

配列とクラスを混同しないでください。クラスは、実世界のエンティティとそのアクションを表します。この目的で配列を使用しないでください。連想配列はプロパティをサポートしている可能性がありますが、アクションはサポートしていません。

これら 3 つの数値インデックスを持つ単純な配列、連想配列、およびオブジェクトの目的は同じではありません。より良いスイートを使用してください。今はパフォーマンスについて考えないでください。ソフトウェアの開発時には、パフォーマンスの改善が必要なユース ケースを定義する必要があります。次に、プロファイリングを開始します。

于 2012-05-20T18:26:51.413 に答える