如果我理解正确,使用 __set(),您可以动态创建类变量,这些变量将是公共的,以及访问私有/受保护的属性。
似乎使用:
__set($name,$value) {
$this->data[$name] = $value;
}
或:
__set($name,$value) {
$this->$name = $value;
}
。都会导致各种垃圾进出。
对于单独的 setter(突变器),每个受保护/私有属性为 1,您有单独的验证控制,但您必须编写一堆 setter。
有没有办法利用魔术__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;
您将如何验证错误的作业?
这取决于
你。如果您坚持使用魔术方法来设置对象的属性,那么您需要决定是否希望该类也负责数据验证,或者这是否应该是另一个对象(或一组对象)的作业。
您可以构建一个数组来将每个属性与验证器映射,然后在 __set 方法上,为该属性和值执行分配的验证器。