یک باگ دیگه تو activerecord
تو کلاس activerecord توابع getattribute و setattribute طوری تعریف شدن که با استفاده از آن میتوان به تمام خاصیتهای خصوصی این کلاس ومشتقاتش براحتی دسترسی داشت.
تو این دو تا کلاس به تابع property_exists توجه کنید که از ورژن ۵.۳ به بعد واسه خاصیتهای خصوصی هم true برمیگردونه.
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;
}
نقل قول: یک باگ دیگه تو activerecord
اصلا خاصیت توابع getter و setter اینه که حتی property های private رو هم بتونه قابل خوندن یا قابل نوشتن کنه این باگ نیست خودشون میخواستن اینطوری باشه مثلا شما یک کلاس ShoppingCart داری که یک property داره به نام price که به نظر من باید private باشه ولی خوب با خاصیت setter میتونی مقدار دهیش کنی ولی فقط از درون کلاس قابل دست یابی باشه، بعد کلا واسه راحتی این تابع های خیلی خوبه و حتی اگه این باگ باشه خطری نداره