2

どちらの方法で作業するのが良いのか疑問に思いました。コントローラクラスでプライベート属性を使用するか、属性の配列として1つのプライベート属性のみを使用します。

それ以外の:

class User{

    private $id;
    private $firstName;
    private $surname;
    private $age;
    private $gender;
    private $city;
    ...
    ...
}


class User{

    private $data;
}

そして、次のようなことができるようになります。

function __construct(){
     //this would contain id, firstName, username, age, gender...
    $data = $model->getData();
}

ありがとう

4

3 に答える 3

2

配列を使用すると、クラスでコードを記述しているときにオートコンプリートツールが失われます。属性の構文エラーを検出する機能が失われます。実際、コードはより混乱し、説明が少なくなります。

オブジェクトを使用することは、通常、保守性を向上させるために、複数の開発者と、またはオブジェクトを作成してから数か月または数年後に自分自身と共有するために、良いことです。私の意見では、属性を維持する必要があります。より紛らわしいコードは、最適化されているか、読み取りが短い場合がありますが、それが必要な場合は、アセンブリコードを記述してください。オブジェクトコードを作成したい場合は、クリーンな方法で作成してください。将来の命を救う状況が常に見つかります。

ここでの問題は、オブジェクト属性とモデルレイヤー列の間のクリーンなマッピングを維持するのは本当に苦痛だと思うかもしれないということです。しかし、何をしようとしても、これはすべてのアプリケーションで常にコーディングする必要がある最小限のことです。ここで行わない場合でも、オブジェクトを使用するときにこれらの属性を知る必要があります。これは失敗のパターンである可能性があります:

私たちの開発者のほとんどは、Do n't Repeat Yourself / Duplication Is Evilの原則を採用しており、作成するソフトウェアには可能な限り適用します。しかし、私たちが犯す可能性のある最も致命的な落とし穴の1つは、抽象化の杖をすばやく広範に振ることです。不必要な複製の結果は、不必要な統合の結果よりもはるかに少ないことを忘れがちです。

DataModelの読み込み例を使用すると、たとえば2つの潜在的な将来の問題を確認できます。

  • 将来的にはバイナリ属性があり、その属性には遅延読み込みが必要であると想像してみてください。何をするにしても、__constructの周りのダーティなソリューションで終わることは間違いありません。
  • これで、クラスオブジェクトのインスタンスを構築し、これらのオブジェクトのデータにモデルからではないデータ(おそらくキャッシュの一種)をフィードする必要があり、数千のこれらのオブジェクトがあります。ただし、そのようなオブジェクトを作成するたびに、すべての属性がモデルから入力されます。

実際、オブジェクト関連モデルに基づいてオブジェクト属性を満たすものを作成したい場合は、他のオブジェクト、インターフェイス、ファクトリ、いくつかのメソッドを暗示するなど、より一般的なものと考える必要があります。そして、少なくとも構成にはありません。

配列には配列を使用し、属性には属性を使用して、PHPエンジンに属性管理を最適化させます。コードオプティマイザーは、文字列でインデックス付けされた配列よりも属性を使用した方が優れていると確信しています。

于 2012-06-20T12:23:26.397 に答える
0

それらを実際に使用する必要があるかどうかによって異なりますが、通常、配列を使用すると操作が簡単になります。

PS:それらは属性ではなく、プロパティと呼ばれます。

于 2012-06-20T11:44:28.120 に答える
0

多くのプロパティがある場合は、配列を使用してください。このようにして、次のような魔法の方法の力を使用できます。

public function __set($name, $value)
    {
        echo "Setting '$name' to '$value'\n";
        $this->data[$name] = $value;
    }

参照:http ://www.php.net/manual/en/language.oop5.overloading.php#object.set

于 2012-06-20T11:47:36.307 に答える