PDA

View Full Version : یک باگ دیگه تو activerecord



mojtaba.baghban
جمعه 18 اسفند 1391, 02:56 صبح
تو کلاس 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;
}

xengil
جمعه 20 اردیبهشت 1392, 06:16 صبح
اصلا خاصیت توابع getter و setter اینه که حتی property های private رو هم بتونه قابل خوندن یا قابل نوشتن کنه این باگ نیست خودشون میخواستن اینطوری باشه مثلا شما یک کلاس ShoppingCart داری که یک property داره به نام price که به نظر من باید private باشه ولی خوب با خاصیت setter میتونی مقدار دهیش کنی ولی فقط از درون کلاس قابل دست یابی باشه، بعد کلا واسه راحتی این تابع های خیلی خوبه و حتی اگه این باگ باشه خطری نداره