PHPでオブジェクト指向の方法でデータを渡すにはどうすればよいですか?


11

MVCフレームワーク(CodeIgniterなど)で作業しているときでも、オブジェクトではなくネストされた配列を渡すことに定期的に頼っています。

これは、オブジェクト指向についての私の理解にうまく従いません。たとえば、コードをJavaに移植する場合、そのような配列(またはベクターなど)を渡すことを夢見ていません。

これがデータを処理する適切な方法かどうか疑問に思っていました。PHPで配列がこのように渡される理由、またはオブジェクトが使用されない理由はありますか?データを渡す最良の方法は何ですか?

回答:


8

Javaのオブジェクト指向とPHPを混同しないでください。Javaは単一のパラダイム言語であり、オブジェクト指向のみを実行します。一方、PHPはマルチパラダイム言語であり、関数型プログラミングまたはオブジェクト指向、あるいはその両方を実行できます。

現在、オブジェクト指向の「悪い」実装などはありません。Javaのオブジェクト指向は、他のすべての言語が従うべき、または従わなければならない決定的な実装ではありません。いくつかの明確な概念があり、両方の言語は独自の方法でそれらを完全に実装します(最初からJava、バージョン5からPHP)。

ですから、あなたの質問に答えるには:CIが何をし、それを使って何をしているのかはPHPの世界で正しいことです。PHPの配列は、最も柔軟で便利な構造の1つであり、データが単なる情報である場合(オブジェクトにロジックを持たない場合)、オブジェクトに対して配列を使用することは実際には良いことです。完全なオブジェクト指向コードは、「オブジェクト指向コードのみ」と同じものではありません。

PHPを使用する場合は、適切なOOプラクティスのリファレンスとしてJavaを使用してください。ただし、「Javaはそれとは異なる」ことにより、PHPの理解を制限しないでください。あなたは本当に両方を台無しにすることができます、あなたが概念を得ないならば、パラダイムはあなたを救いません。

いずれにせよ、Javaを好みに合わせて(個人的な好みとして)Web開発用のRubyをチェックする場合、それらはもう少し密接に関連しています。


Java OOとPHP OOを混同しないのはなぜですか?PHPがネイティブの配列/ハッシュデータ型を持っていることを除いて、それらはほとんど同じです。
マーティンウィックマン

実装は非常に似ています。私はそれらが両方の言語でどのように使用されるかについて言及していました。
ヤニス

OOPに問題があります。1つのオブジェクトが他のオブジェクトに依存するアプリケーション(PHPベース)のOOPデザインを作成したい。PHPでこれをどのように処理しますか?plzは...私を助けて
イムラン・カーン

シナリオ例:ホテルオブジェクトには部屋オブジェクトがあり、部屋オブジェクトには日付オブジェクトが必要です...日付オブジェクトには人物タイプの価格があります。次に、OOPベースでPHPでこのタイプのシナリオを処理する方法を説明します(各レベルで処理する必要がある大きなデータがあるため)。
イムランカーン14年

@ウォルター私はあなたの応答を待っています.... plzは私を助けます。
イムランカーン

2

オブジェクトがオブジェクト指向のパラダイムではないという理由だけで、配列の代わりにオブジェクトを使用するのは、単に個人的な好みです:)

オブジェクトはIDEで便利なコード補完を提供し、インターフェイス(タイプヒンティング)と継承を使用できます。

利点があるために配列ではなくオブジェクトを使用する場合-オブジェクトを使用するが、オブジェクトであるという理由だけで使用する場合は、このリファクタリングに時間を無駄にしないでください:)


配列がメモリとCPUをより多く使用するようにオブジェクトを使用します。」これは(常に)正しくありません。配列で同じ量のデータを保持するオブジェクトは、ほぼ同じ量のメモリを占有します。
ヤニス

@Yannis Rizos、はい、オブジェクトはより少ないメモリを使用することができます。
OZ_

使用できるメモリが少ないというだけでなく、システムの他のメモリパフォーマンスの側面やオブジェクトを使用する利点と比べて些細なため、メモリの使用は無関係です。メモリの使用量にそれほど注意を払った場合、オブジェクトを使用することはありません。私たちが気にするのは、オブジェクトがシステムを推論し構築するためのより良いツールを提供するということです。
ラインヘンリヒズ

@Rein Henrichs、知っています、ありがとう。それが、「記憶」についてのすべての言葉が私の答えから削除された理由です。私は愚かな最適化をしようとobjects just because they are objectsはしていませんが、リファクタリングの理由ではないと確信しています:)コメントだけでなく、答えを読んでください。
OZ_

十分に公平で、編集の前にコメントしました。
ラインヘンリヒズ

1

オブジェクト指向システムで実際にデータを渡すのではなく、オブジェクトを渡します。違いは、オブジェクトにはデータだけでなく動作も含まれていることです。そのため、データ指向ではなくオブジェクト指向と呼んでいます。

データの振る舞いを必要としない限り、プレーンな古いphp配列は値オブジェクトと同じくらい良い(または悪いことに、あなたの視点に応じて)。


0

これは単なる調整の問題だと思います-プログラミングには「オブジェクト」の実装が数多くあります-PythonとJavascriptのプロパティは著しく異なります。PHP OOは間違いなくハックです。PHP配列は伝統的な意味では「オブジェクト」ではありませんが、明らかに目的を果たします。データにカスタムの動作をさせたくないのであれば、なぜオブジェクトを使用するのですか?

編集:

re:不変の値オブジェクト

http://bradley-holt.com/2010/09/immutable-value-objects-in-php/


データに信頼できる構造を与えるため。ええ、特定のフォーマット/配列のネストを出力する関数を作成できますが、それを少し変更してそれを渡す別の関数を書いてはいけません。
マシュー

1
確かに-変数アクセスを保護するオブジェクトが必要になります-例えばPythonタプルに相当するPHPがないためです。しかし、あなたはそこに行きます-あなたは問題を定義しました、あなたは言語で利用可能な構造を使用する必要があります...または単にそれの「癖」と一緒に暮らすことを学びます。問題に関する興味深い議論を含む最初の投稿へのリンクを追加しました。
-sunwukung
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.