Почему $this частично скрывается в Yii CActiveRecord? Добрый вечер. Подскажите пожалуйста, мне надо получить все свойства модели наследованной от CActiveRecord. Код получения свойств:class MyModel extends CActiveRecord { public $property1; public $property2; public $property3;
public function getProperties() { foreach($this as $key => $value) { // ... } } } В итоге выводится содержимое MyModel::_attributes (*CActiveRecord*), а мои $property1, $property2, $property3 где-то теряются. Почему так? Можно ли исправить?
$this частично скрывается в Yii CActiveRecord из-за того, что Yii использует магические методы для доступа к атрибутам модели через CActiveRecord::_attributes.
В данном случае, когда вы используете foreach($this as $key => $value), вы обращаетесь к атрибутам CActiveRecord, а не к свойствам, объявленным в вашем классе MyModel. Чтобы получить доступ к своим свойствам, вы можете использовать конструкцию get_object_vars($this), которая вернет массив свойств объекта, включая свойства, объявленные в вашем классе MyModel.
Вот пример исправленного кода:
class MyModel extends CActiveRecord { public $property1; public $property2; public $property3; public function getProperties() { foreach(get_object_vars($this) as $key => $value) { // ... } } }
Теперь метод getProperties будет обращаться как к свойствам CActiveRecord, так и к свойствам MyModel.
$this частично скрывается в Yii CActiveRecord из-за того, что Yii использует магические методы для доступа к атрибутам модели через CActiveRecord::_attributes.
В данном случае, когда вы используете foreach($this as $key => $value), вы обращаетесь к атрибутам CActiveRecord, а не к свойствам, объявленным в вашем классе MyModel. Чтобы получить доступ к своим свойствам, вы можете использовать конструкцию get_object_vars($this), которая вернет массив свойств объекта, включая свойства, объявленные в вашем классе MyModel.
Вот пример исправленного кода:
class MyModel extends CActiveRecord{
public $property1;
public $property2;
public $property3;
public function getProperties()
{
foreach(get_object_vars($this) as $key => $value)
{
// ...
}
}
}
Теперь метод getProperties будет обращаться как к свойствам CActiveRecord, так и к свойствам MyModel.