تو کلاس activerecord توابع getattribute و setattribute طوری تعریف شدن که با استفاده از آن میتوان به تمام خاصیتهای خصوصی این کلاس ومشتقاتش براحتی دسترسی داشت.
تو این دو تا کلاس به تابع property_exists توجه کنید که از ورژن ۵.۳ به بعد واسه خاصیتهای خصوصی هم true برمیگردونه.
[/rtl]
[left]
public function getAttribute($name)
{
if(property_exists($this,$name))
return $this->$name;
elseif(isset($this->_attributes[$name]))
return $this->_attributes[$name];
}
public function setAttribute($name,$value)
{
if(property_exists($this,$name))
$this->$name=$value;
elseif(isset($this->getMetaData()->columns[$name]))
$this->_attributes[$name]=$value;
else
return false;
return true;
}
در اینجا درسته که تابع property_exists مقدار true برمیگردونه و شرط اجرا میشه اما از اونجایی که متد getAttribute در کلاس CActiveRecord یعنی کلاس parent تعریف شده بنابراین به property های private کلاسهای مشتق شده ازش دسترسی نداره
تنها مساله ای که وجود داره اینه که با استفاده از این متدها میشه توسط کلاس های مشتق شده از CActiveRecord به property های private از کلاس CActiveRecord دسترسی داشت.