как создать объект по имени класса

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

как создать объект по имени класса

Сообщение porcelanosa »

В этой теме был мной поднят вопрос как создать объект по имени класса
Т.е. зная имя модели, мне надо к ней обратиться

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

$model_name::model() 
так мне подсказали в вышеуказанной теме, но это не сработало.
Так же я рассматривала следующие варианты:

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

$className = 'MyClass';
//1)
$model = new $className();
//2)
$class = new ReflectionClass($className);
$model = $class->newInstance();
//3)
$class = new ReflectionClass($className);
$model = call_user_func_array(array(&$class, 'newInstance'), $args);//$args = массив аргументов    
Ничего не сработало.
Допускаю, что ошибка где то в другом месте, но постоянно выскакивает следующая ошибка

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

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in
на строке

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

$id= $model::model()->findByPk($id); 
Подскажите куда копать.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

4php
Сообщения: 37
Зарегистрирован: 2011.02.20, 11:38

Re: как создать объект по имени класса

Сообщение 4php »

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in

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

$model::model();
 

нужно делать через call_user_func_array если php < 5.3

Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: как создать объект по имени класса

Сообщение porcelanosa »

4php писал(а):Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in

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

$model::model();
 

нужно делать через call_user_func_array если php < 5.3
имеется ввиду вот этот вариант:

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

$class = new ReflectionClass($className);
$model = call_user_func_array(array(&$class, 'newInstance'), $args);//$args = массив аргументов       
?
Пробовала

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

            $class = new ReflectionClass($model_name);
            $id = call_user_func_array(array(&$class::model(), 'findByPk'), array($id));//$args = массив аргументов   >  
ошибка
syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ')' in
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: как создать объект по имени класса

Сообщение porcelanosa »

пробовала вот так:

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

            $model= new $model_name;
            $model = call_user_func_array(array(&$model, 'model'), array());//$args = массив аргументов
            $id= $model->findByPk($id); 
ЗАРАБОТАЛО!!!!
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

mrix
Сообщения: 125
Зарегистрирован: 2010.08.30, 11:48
Откуда: Россия, Новосибирск

Re: как создать объект по имени класса

Сообщение mrix »

Можно так

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

//так
$model = new $className;
$model->findByPk(1);
//или так
CActiveRecord::model($className)->findByPK(1);
 

Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: как создать объект по имени класса

Сообщение porcelanosa »

mrix писал(а):Можно так

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

//так
$model = new $className;
$model->findByPk(1);
//или так
CActiveRecord::model($className)->findByPK(1);
 
Да получается и так можно - лишнее понаписала.
Правда не совсем понятно КАК это работает.
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

mrix
Сообщения: 125
Зарегистрирован: 2010.08.30, 11:48
Откуда: Россия, Новосибирск

Re: как создать объект по имени класса

Сообщение mrix »

Для этого надо посмотреть исходный код метода CActiveRecord::model() :)

Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: как создать объект по имени класса

Сообщение Caveman »

И все же пора уже переходить на 5.3 и пользоваться предоставляемыми возможностями.
Записи вида

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

$model = new $className;
$model = $className::model(); 
явно выглядят симпатичнее и понятнее

Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: как создать объект по имени класса

Сообщение porcelanosa »

Caveman писал(а):И все же пора уже переходить на 5.3 и пользоваться предоставляемыми возможностями.
Записи вида

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

$model = new $className;
$model = $className::model(); 
явно выглядят симпатичнее и понятнее
кто ж спорит. Только на VDS стоит 5.2.17 и никто менять не собирается
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: как создать объект по имени класса

Сообщение Nafania »

на VDS вы сами можете менять пакеты

Ответить