4

OOP プログラミングを学び始めたとき、すべてがオブジェクトであると読みました。ほとんどの場合、私は PHP で開発しています。ここで配列が重要な役割を果たします。C# のような言語では、ほとんどの場合、配列ではなくオブジェクトを使用して渡す必要があります。

例えば:

Class Product
{
    private $data = array();

    public function __construct()
    {
        $this->data['setting_1'] = 'a';
        $this->data['setting_2'] = 'b';
        $this->data['setting_3'] = 'c';
        $this->data['setting_4'] = 'd';
        $this->data['setting_5'] = 'e';

    }
}

PHP を使用する場合、すべてのクラスを作成する意味はありますか? 例えば:

Class Product
{
    private $setting_1, $setting_2,  $setting_3,  $setting_4,  $setting_5; 
}

次に、クラス Product を別のクラス (例: Model) でインスタンス化し、配列の代わりにオブジェクトを返します (例: Controller に)?

4

4 に答える 4

4

答えは簡単です。

すべてがオブジェクトです

はあくまでも理想です。

現実世界のほとんどの OOP 言語には、単純なデータ型もあります。Java や CSharp でも。PHP では、複雑な非オブジェクト データ型として配列さえあります。もちろん、OOP コンテキストでも、心配する必要はありません。

強力な配列データ型を持つことは、欠点よりも利点であることに注意してください。私の意見では、PHP で最も欠けている OOP 機能はポリモーフィズムです。


ただし、PHP5 では、PHP コア ディストリビューションの一部である、いわゆる(SPL) 拡張機能でイテレータデータ構造のスイートが導入されました。Standard PHP Libraryそれらを確認することはできますが、ほとんどの場合、配列データ型は適切に機能する (そしてパフォーマンスが高い) はずです。

于 2013-06-20T18:06:45.713 に答える
2

「PHP を使用する場合、すべてのクラスを作成する意味はありますか?」「PHPを使用する場合、すべてのクラスにプロパティを作成する意味はありますか?」

はい、使用されているのが配列だけだった場合、他の誰かのコードで開発することは非常に困難です。特に定数がない場合、何かをタイプミスしてバグを作成する可能性が非常に高くなり、見つけるのが非常に困難になります。

また、「すべてのオブジェクトを作成する」ことについて話しているのではなく、プロパティと値のリスト(配列)について話しているわけではありません。これが私の答えに基づいています。

于 2013-06-20T18:07:53.390 に答える
2

「すべてがオブジェクトである」という考え方では、これは 1 日目から OO ベースの言語に適用されることに注意してください。PHP はそれらの言語の 1 つではなく、オブジェクトは事後に追加されました。したがって、PHP の単純な変数型はオブジェクトではなく、より小さくて単純なメモリです。

髪を分割していますが、PHP でオブジェクトを使用する必要がない場合は使用しないでください。単純な配列は、配列を含むオブジェクトよりも軽量です。軽いということは、ラムの使用量が少なくなり、実行速度がわずかに速くなることを意味します。

PHP を書く上で得られる最良のアドバイスは、KISS (Keep It Simple Stupid) です。

于 2013-06-20T18:18:50.913 に答える
2

いいえ、すべてがクラスにある必要はありません。これは Java ではありません。:P

PHP はマルチパラダイム言語です。つまり、独り占めすることなくオブジェクト指向を使用することは完全に合法です。OOP 専門家は、あなたがいかにひどい人間であるかを教えてくれるかもしれませんが、OOP は全体的な複雑さを軽減する場合にのみ価値があります。それを行うためにすべての値をクラスにラップすると、実際の利益のために複雑さが増します。

クラスは基本的に、独自の独自の動作を持つデータのテンプレートです。データに関連付けられた動作 (たとえば、特別な構築、検証、解釈、永続化など) が必要ない場合、データをオブジェクトにラップするのはやり過ぎです。

于 2013-06-20T18:10:09.243 に答える