Вот контекст:
$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)
, все свойства являются частными и подчеркнуты. Таким образом, для ключа 'name' было бы следующее:
private $_name;
public function setName($name) {
$this->_name = $name;
return $this;
}
Я знаю, что он не вызывается, потому что я пытался вставить исключение сразу после $method = 'set' . ucfirst($name);
. Это исключение было применено, когда $name
не ссылалось на действительный установщик, но не было выполнено, когда оно не было. Надо было бить каждый раз. Кто-нибудь знает, что здесь происходит?