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 回答