Переменная переменной при вызове метода модели

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
vitaliy43
Сообщения: 7
Зарегистрирован: 2012.11.20, 12:05
Контактная информация:

Переменная переменной при вызове метода модели

Сообщение vitaliy43 »

Доброго времени суток всем. Столкнулся вот с какой проблемкой.
Не работает конструкция $this->{model_name}::model()->название метода, в лог валится: "syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM".
Версия php: 5.2.4. Как можно обойти эту проблему и сделать символический вызов ( то есть с подстановкой имени модели из переменной) ?

Аватара пользователя
ElisDN
Сообщения: 5658
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Переменная переменной при вызове метода модели

Сообщение ElisDN »

В Yii есть стандартный способ

Код: Выделить всё

CActiveRecord::model($this->model_name)->method()
Последний раз редактировалось ElisDN 2012.11.20, 15:03, всего редактировалось 3 раза.

Аватара пользователя
Loki
Сообщения: 65
Зарегистрирован: 2011.01.16, 10:47
Откуда: Омск

Re: Переменная переменной при вызове метода модели

Сообщение Loki »

Код: Выделить всё

$res = call_user_func($this->{model_name}.'::model')->method;

vitaliy43
Сообщения: 7
Зарегистрирован: 2012.11.20, 12:05
Контактная информация:

Re: Переменная переменной при вызове метода модели

Сообщение vitaliy43 »

Loki писал(а):

Код: Выделить всё

$res = call_user_func($this->{model_name}.'::model')->method;
Не работает. Выводит "Use of undefined constant model_name - assumed 'model_name' "

Аватара пользователя
ElisDN
Сообщения: 5658
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Переменная переменной при вызове метода модели

Сообщение ElisDN »

vitaliy43 писал(а):Не работает. Выводит "Use of undefined constant model_name - assumed 'model_name' "
Ну да. Переменные в PHP со знака доллара начинаться должны. $this->$model_name или $this->{$model_name}.

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Переменная переменной при вызове метода модели

Сообщение lancecoder »

зис не надо
$model_name::model()->find()

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Переменная переменной при вызове метода модели

Сообщение lancecoder »

а если зыс юзаете значит модель у вас в свойствах и тогда не надо ::model()

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Переменная переменной при вызове метода модели

Сообщение lancecoder »

может быть еще 1 вариант если в свойстве строка с именем модели, тогда
$model = $this->model_name;
$model::model()->find()

Аватара пользователя
ElisDN
Сообщения: 5658
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Переменная переменной при вызове метода модели

Сообщение ElisDN »

lancecoder писал(а):$model::model()->find()
В 5.2?

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Переменная переменной при вызове метода модели

Сообщение lancecoder »

не вижу преград или может не знаю, 5.4 помоему хавает такое

Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Переменная переменной при вызове метода модели

Сообщение lancecoder »

ну если любите пожоще:
$model=$model.'::model()';
$model=eval('return '.$model);
$model->find();

Аватара пользователя
ElisDN
Сообщения: 5658
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Переменная переменной при вызове метода модели

Сообщение ElisDN »

Это $model::model() вместе с анонимными функциями в 5.3.0 появилось.

Ответить