Почему $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 где-то теряются. Почему так? Можно ли исправить?

21 Авг 2019 в 07:09
144 +1
1
Ответы
1

$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.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир