0

私が正しく理解していれば、__ set()を使用すると、クラス変数をその場で作成できます。これはパブリックになり、プライベート/保護されたプロパティにアクセスできます。

使用しているようです:

__set($name,$value) {
  $this->data[$name] = $value;
}

また:

__set($name,$value) {
  $this->$name = $value;
}

...両方とも、あらゆる種類のゴミを出し入れします。

個別のセッター(ミューテーター)を使用すると、保護/プライベートプロパティごとに1つ、個別の検証コントロールがありますが、一連のセッターを作成する必要があります。

魔法の__set()を利用し、プロパティに応じて検証する方法はありますか?

たとえば、言いましょう

class stuff {

  private $name; // alphabet, limit 10 chars
  private $size; // integers 1 - 10;
  private $price; // decimals 0.000 - 999.999

  __set($property,$value) {
    $this->$property = $value;
  }

}

$thing = new stuff();
$thing->name = 1234;
$thing->size = 'b';
$thing->price = -40;

悪い割り当てをどのように検証しますか?

4

2 に答える 2

1

それはあなた次第です。オブジェクトのプロパティを設定するために魔法のメソッドを使用することを主張する場合は、クラスがデータの検証も担当するかどうか、またはそれが別のオブジェクト (またはオブジェクトのセット) の仕事であるべきかどうかを決定する必要があります。

于 2012-04-28T03:36:10.147 に答える
0

配列を作成して各プロパティをバリデータにマップし、__set メソッドで、そのプロパティと値に割り当てられたバリデータを実行できます。

于 2012-04-28T03:34:43.813 に答える