Оценить строку как код PHP? - PullRequest
3 голосов
/ 23 марта 2012

У меня есть строка, которую я хочу, чтобы PHP читался как кусок кода. Причина в том, что я хочу заранее создать набор инструкций для PHP, а затем выполнить его позже. В настоящее время у меня есть:

$string = '$this->model_db->get_results()';

И желаемый результат:

$string2 = $this->model_db->get_results();

Ответы [ 3 ]

4 голосов
/ 23 марта 2012

вы можете иметь переменную переменную / функцию, но не можете иметь цепочки переменных методов. однако вы можете создать цепочку методов, используя переменные переменные / функции.

Проверьте эту страницу документации php: http://php.net/manual/en/language.variables.variable.php

показывает использование строк в качестве имен объектов или методов. использование eval может привести к уязвимостям безопасности в зависимости от источника ваших данных.

$var1 = 'model_db';
$var2 = 'get_results';

$this->$var1->$var2();
4 голосов
/ 23 марта 2012

Звучит так, как будто вам нужна PHP * функция eval , которая выполняет строку, содержащую код PHP.Например:

// Now
$get_results = '$this->model_db->get_results(' . intval($id) . ');';

// Later
eval($get_results);

Однако, eval обычно плохая идея .То есть, есть гораздо лучшие способы сделать то, что вы думаете сделать с eval.

В приведенном выше примере вы должны убедиться, что $this находится в области видимости кода, вызывающего eval.Это означает, что если вы попытаетесь ввести eval($get_results) в совершенно другую часть кода, вы можете получить сообщение об отсутствии $this или $this->model_db.

Более надежной альтернативой было бы создание анонимная функция (доступно в PHP 5.3 и выше):

// Now
$that = $this;
$get_results = function() use ($that, $id) {
    return $that->model_db->get_results($id);
};

// Later
call_user_func($get_results);

Но что, если $this сейчас недоступен?Просто: сделайте это параметром функции:

// Now
$get_results = function($that) use ($id) {
    return $that->model_db->get_results($id);
};

// Later
call_user_func($get_results, $this);
1 голос
/ 23 марта 2012

http://php.net/manual/en/function.eval.php

<?php
    $string = 'cup';
    $name = 'coffee';
    $str = 'This is a $string with my $name in it.';
    echo $str. "\n";
    eval("\$str = \"$str\";");
    echo $str. "\n";
?>

Или в вашем случае:

<?php
    $string = "\$string2 = \$this->model_db->get_results();";
    // ... later ...
    eval($string);
    // Now $string2 is equal to $this->model_db->get_results()
?>
...