Вопрос по ООП - вызов статического метода, если ...

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

Вопрос по ООП - вызов статического метода, если ...

Сообщение porcelanosa »

Вопрос по ООП в PHP но в контексте Yii
Классический вызов в Yii

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

Items::model->find() 
. А если в action или там просто в метод передается строковая переменная

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

 $value = 'Items' 
, то вызов вышеописанного метода приводит к ошибке
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in ...
. Я выхожу из подобной ситуации передавая объект сразу. Т.е.

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

 $value = Items::model() 
и дальше уже

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

$value->find() 
, но по-моему это не совсем правильно.
Подскажите, что в таких случаях надо делать?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Вопрос по ООП - вызов статического метода, если ...

Сообщение rak »

Так работает в php 5.3

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

$name = 'Items';
$model = $name::model();
var_dump($model->findByPk(1)->attributes);
 
А так в старых версиях

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

$name = 'Items';
$model = call_user_func(array($name, 'model'));
var_dump($model->findByPk(1)->attributes);
 
Аватара пользователя
radamir
Сообщения: 142
Зарегистрирован: 2009.08.10, 08:02
Откуда: Новосибирск

Re: Вопрос по ООП - вызов статического метода, если ...

Сообщение radamir »

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

CActiveRecord::model($name)->find() 
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Вопрос по ООП - вызов статического метода, если ...

Сообщение porcelanosa »

rak писал(а):Так работает в php 5.3

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

$name = 'Items';
$model = $name::model();
var_dump($model->findByPk(1)->attributes);
 
У меня php 5.3
Но допустим такая конструкция вызывает ошибку

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

$model_name = 'Items';
public function test(){
$model = $this->model_name::model()->findByPk($id);
} 
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in ...
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Вопрос по ООП - вызов статического метода, если ...

Сообщение rak »

ага, видимо через $this->property нельзя, у меня даже ide подсвечивает ошибку
Но получится вот так:

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

$modelName = $this->model_name;
$model = $modelName::model()->findByPk($id);
 
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Вопрос по ООП - вызов статического метода, если ...

Сообщение porcelanosa »

radamir писал(а):

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

CActiveRecord::model($name)->find() 
Т.е. если передать строку в метод model(), то получим модель с этим именем?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Ответить