Yii Framework Forum: یک باگ دیگه تو Activerecord - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

یک باگ دیگه تو Activerecord

#1 User is offline   mojtaba6485 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 26-February 13

Posted 07 March 2013 - 05:56 PM



تو کلاس 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;
	}




0

#2 User is offline   Manee 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 103
  • Joined: 23-September 12

Posted 08 March 2013 - 12:11 AM

سلام. میشه بگید راه حلش چیه و چه طوری باید می بود؟

0

#3 User is offline   mojtaba6485 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 26-February 13

Posted 08 March 2013 - 05:53 AM



ظاهرا از اونجا که yii بر اساس php 5.1 نوشته شده که تو اون ورژن property_exists فقط خاصیت‌های عمومی رو true برمی‌گردونده و مشکلی نبوده.
شما اگه از php ورژن ۵.۳ به بالا استفاده می‌کنی اگه به این موضوع حساسیت دارین می‌تونین این توابع رو بازنویسی کنین


0

#4 User is offline   Reza m 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 148
  • Joined: 07-March 12

Posted 08 March 2013 - 07:30 AM


البته این مشکل در مورد کلاسهای مشتق شده از CActiveRecord وجود نداره

به عنوان مثال در مورد متد getAttribute داریم:

if(property_exists($this,$name))
	return $this->$name;


در اینجا درسته که تابع property_exists مقدار true برمیگردونه و شرط اجرا میشه اما از اونجایی که متد getAttribute در کلاس CActiveRecord یعنی کلاس parent تعریف شده بنابراین به property های private کلاسهای مشتق شده ازش دسترسی نداره

تنها مساله ای که وجود داره اینه که با استفاده از این متدها میشه توسط کلاس های مشتق شده از CActiveRecord به property های private از کلاس CActiveRecord دسترسی داشت.

2

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users