Может ли php eval вернуть логическое значение? - PullRequest
1 голос
/ 27 октября 2010

Кажется, я не могу получить eval для возврата логического значения для '(4> 5)'

Возможно ли это?Если нет, то как мне заставить это работать (без написания парсера)

Я попробовал это:

$v = eval('return (10 > 5)');
var_dump($v);

// Result = bool(false)

ОБНОВЛЕНИЕ

Благодаря @Pekka - я добавилточка с запятой в приведенном выше коде, и это работает.

Ответы [ 3 ]

4 голосов
/ 27 октября 2010

См. руководство :

eval () возвращает NULL, если в вызываемом коде не вызывается return, и в этом случае возвращается значение, переданное для возврата .Если в обработанном коде есть ошибка разбора, eval () возвращает FALSE, и выполнение следующего кода продолжается нормально.Невозможно отловить ошибку разбора в eval () с помощью set_error_handler ().

Это будет работать так, как @mhitza уже говорила в комментарии.Я бы просто добавил скобки, чтобы быть в безопасности:

    $x = eval('return (4 < 5);');
    echo $x;
1 голос
/ 27 октября 2010

Пожалуйста, включите display_errors & подходящий error_reporting, прежде чем обращаться к сообществу:

Ошибка разбора: синтаксическая ошибка, неожиданный конец $ в - (2): код eval () d в строке 1

Aha:

eval('return (10 > 5);');

Обратите внимание на ;.

0 голосов
/ 27 октября 2010

На это, вероятно, уже достаточно ответили ... но мне помогает всегда думать о eval в PHP как о всей строке кода и не забывать точку с запятой, например,

eval('\$myBooleanValue = 4 > 5;');
return $myBooleanValue;

Не пытайтесь что-то вроде этого:

$myBooleanValue = eval('4 > 5');
...