Реализация Yii __get
и __set
в CActiveRecord
отличается от "стандартной" в CComponent
;последний проверяет (и предпочитает использовать) метод получения и установки свойства, в то время как первый не делает этого вообще.
Чтобы прямо ответить на ваш вопрос: вам необходимо встроить эту функцию в свойсобственный класс, имеющий две реализации , упомянутые выше в качестве руководства, например, что-то вроде этого для установщика:
public function setAttribute($name,$value)
{
$setter='set'.$name;
if(method_exists($this,$setter))
$this->$setter($value);
else if(property_exists($this,$name))
$this->$name=$value;
else if(isset($this->getMetaData()->columns[$name]))
$this->_attributes[$name]=$value;
else
return false;
return true;
}
Эта реализация дает приоритет получателям и установщикамголые свойства, которые могут или не могут быть тем, что вы хотите.После подкласса CActiveRecord
, подобного этому, вы будете выводить свои собственные модели из подкласса.
Важное замечание: Тем не менее вы не говорите, чего хотите достичь, используя эту функциональностьэто вызывает вопросы.Например, обычно такие функции используются для проверки значений, но Yii имеет свою собственную систему проверки. Возможно, есть лучший (более похожий на Yii) способ сделать то, что вы хотите.