Как указано в вики Yii, вы можете использовать любой из них. С $model->attributes
вы устанавливаете переменную напрямую. С помощью $model->setAttributes()
вы устанавливаете переменную через так называемый «метод setter».
http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/#hh1
Я хотел бы использовать метод установки вместо прямого вызова переменной, как вы можете добавить строку в методе сеттер, и она будет применяться ко всем его звонки, и она спасет вас от много головной боли в будущем.
Пример:
class Model {
public $attributes;
public function setAttributes($attributes) {
$this->attributes = $attributes;
}
public function getAttributes() {
return $this->attributes;
}
}
$model = new Model();
$model->setAttributes("Foo");
echo $model->getAttributes();
$model->setAttributes("Bar");
echo $model->getAttributes();
Итак, теперь, если вы хотели бы сделать дополнительную операцию по атрибуту, вы можете добавить его в метод setAttributes()
, и вместо того, чтобы изменить две строки кода, вы можете изменить единственный.
Пример:
class Model {
public $attributes;
public function setAttributes($attributes) {
$this->attributes = $attributes . "-Bar";
}
public function getAttributes() {
return $this->attributes;
}
}
$model = new Model();
$model->setAttributes("Foo");
echo $model->getAttributes();
$model->setAttributes("Bar");
echo $model->getAttributes();
Теперь масштабироваться это до уровня, когда это было бы неудобно менять тысячи строк кода, вместо того чтобы изменить пару сеттеров.
Я просто догадываюсь, но 'setAttributes()' также должен запускать некоторые правила проверки. – Narf