如果我理解正确,使用 __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;
你将如何验证糟糕的作业?