これは、大規模なソフトウェアプロジェクトに数年間取り組むまでは、おそらく深く理解することではありません。多くの新しいコンピュータサイエンス専攻は、すべての正しい言葉(カプセル化、データを使用した機能、および保守性)で答えを出しますが、それらすべてが優れている理由を本当に理解している人はほとんどいません。
いくつかの例を見てみましょう。
- 配列が返された場合は、すべての値を事前に計算するか、より複雑な値を作成できる小さな値をたくさん返す必要があります。
WordPressの投稿のリストを返すAPIメソッドについて考えてみてください。これらの投稿にはすべて著者がいて、著者には名前、電子メールアドレス、さらには経歴のあるプロフィールさえあります。
配列内のすべての投稿を返す場合は、投稿IDの配列を返すように制限する必要があります。
[233, 41, 204, 111]
または、次のような大規模な配列を返します。
[ title: 'somePost', body: 'blah blah', 'author': ['name': 'billy', 'email': 'bill@bill.com', 'profile': ['interests': ['interest1', 'interest2', ...], 'bio': 'info...']] ]
[id: '2', .....]]
IDのリストを返す最初のケースは、その投稿に関する情報を取得するためにIDごとにAPI呼び出しを行う必要があるため、あまり役に立ちません。
2番目のケースでは、90%の時間で必要な情報よりもはるかに多くの情報を取得し、より多くの作業を実行します(特に、これらのフィールドのいずれかを構築するのが非常に複雑な場合)。
一方、オブジェクトは、必要なすべての情報へのアクセスを提供できますが、実際にはまだその情報を取得していません。フィールドの値の決定は、オブジェクトを使用するときに遅延して(つまり、値が必要なときに、事前にではなく)実行できます。
- アレイは、意図したよりも多くのデータと機能を公開します
返される大規模な配列の例に戻ります。これで、誰かがpost配列内の各値を反復処理して出力するアプリケーションを作成する可能性があります。APIが更新されて、そのpost配列に要素が1つだけ追加された場合、アプリケーションコードは、おそらく印刷されるべきではない新しいフィールドを出力するため、壊れます。APIによって返されるpost配列内のアイテムの順序が変更されると、アプリケーションコードも破損します。したがって、配列を返すと、オブジェクトが作成しない可能性のあるあらゆる種類の依存関係が作成されます。
オブジェクトは、その中に情報を保持して、便利な機能を提供できるようにします。たとえば、投稿オブジェクトは、前または次の投稿を返すのに十分スマートである可能性があります。アレイはあなたのためにそれを行うことができませんでした。
上記のオブジェクトのすべての利点は、より柔軟なシステムを作成するのに役立ちます。
count()array_*()