这是上下文:
$values = $form->getValues();
foreach($values as $key=>$value) {
$obj->{$key} = $value;
}
如果$key
是有效键,__set($name, $value)
则不调用。如果$key
不是一个有效的密钥,它就是。这是我的套装的样子:
public function __set($name, $value) {
$method = 'set' . ucfirst($name);
if(method_exists($method)) {
$this->$method($value);
} else {
throw new RuntimeException('Attempt to access a non-existant property with method ' . $method);
}
}
在__set($name, $value)
方法所属的对象中,所有属性都是私有的并带有下划线。因此,对于键“名称”,将有以下内容:
private $_name;
public function setName($name) {
$this->_name = $name;
return $this;
}
我知道它没有被调用,因为我尝试在$method = 'set' . ucfirst($name);
. 该异常在$name
没有引用有效的 setter 时被命中,但在没有引用时未被命中。应该是每次都被击中。有人知道这里发生了什么吗?