2016-03-05 2 views
1

Я пытаюсь назвать это из строки Yii::app()->user->id_rol. Итак, я хочу взять эту строку и выполнить вызов.Вызов статического метода из строки в PHP

Я пытался сделать это:

$class = "Yii::app()->user->id_rol"; 
$class = explode('::',$class); 
$class[1] = explode('->',$class[1]); 

$class2 = new $class[0]; 
$string = ""; 
$n = count($class[1]); 
for($i = 0; $i<$n;$i++){ 
(($i+1) == $n) ? $fl = '' : $fl = '->'; 
$string .= $class[1][$i].$fl; 
} 

$model = $class2->$string; 

... но это не работает.

Не определено свойство: Yii :: $ приложение() -> user-> id_rol

Как я могу заставить его работать?

+0

Что именно вы пытаетесь выполнить, более крупную картину, здесь? –

+0

Я пытаюсь указать имя var для получения идентификатора rol в моем новом модуле в параметрах, например, этот массив 'evaluation' => ( \t \t 'id_rol' => 'Yii :: app() -> user-> id_rol ', \t \t), Итак, мне нужно взять эту литеральную строку как переменную –

+0

Как насчет '$ prop =' id_rol '; Yii :: приложение() -> пользователь -> $ prop'? – mnv

ответ

0

Я думаю, что комментарий mnv выше - это путь. В противном случае вы рискуете всеми видами проблем с инъекцией кода и еще много чего. В худшем случае, если вы действительно хотите сделать это, я бы рекомендовал делать следующее (насколько это мне больно писать это):

$code = "return {$VARIABLE_FROM_DB};"; 
$value = eval($code); 

Тем не менее, должен быть лучший способ сделать что вы пытаетесь сделать в целом. Каков источник кода, предоставленного БД? Можете ли вы переформатировать его таким образом, чтобы вы не сохраняли код в базе данных?

Смежные вопросы