【问题标题】:Can php eval return a boolean value?php eval 可以返回布尔值吗?
【发布时间】:2010-10-26 21:07:23
【问题描述】:

我似乎无法让 eval 返回 '(4 > 5)' 的布尔值

这可能吗?如果不是,我怎么能让它工作(不编写解析器)

我试过这个:

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

// Result = bool(false)

更新

感谢@Pekka - 我在上面的代码中添加了一个分号,它可以工作。

【问题讨论】:

  • 小心eval 声明。
  • @mhitza - 不起作用,请参阅上面发布的更新
  • @You - 是的。非常非常小心:)
  • 语句末尾加分号就可以了

标签: php eval


【解决方案1】:

the manual:

eval() 返回 NULL,除非在评估代码中调用 return,在这种情况下 返回传递给 return 的值。如果评估代码中存在解析错误,则 eval() 返回 FALSE 并继续正常执行以下代码。使用 set_error_handler() 无法在 eval() 中捕获解析错误。

它会像@mhitza 在评论中所说的那样工作。为了安全起见,我只想添加括号:

    $x = eval('return (4 < 5);');
    echo $x;

【讨论】:

  • 是的 - 我忘了分号 - 干杯!
【解决方案2】:

这可能已经得到了充分的回答......但是对我有帮助的是始终将 PHP 中的 eval 视为整个代码行,并且不要忘记分号,例如

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

不要尝试这样的事情:

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

【讨论】:

  • 是的 - JavaScript 的 eval() 可以做后者,但不是 PHP。
  • 如果在eval() 语句之前没有定义$myBooleanValue,您的代码是否仍然有效?我的代码中有这样一个案例。
  • @KanwarbirSingh,是的......我不知道有什么怪癖会阻止它像任何其他代码行一样工作。因为你可以写$myBooleanValue = 4 &gt; 5来初始化一个变量,你可以在eval()中做同样的事情
【解决方案3】:

在转向社区之前,请启用display_errors 和合适的error_reporting

解析错误:语法错误,意外 $end in -(2) : eval()'d code on line 1

啊哈:

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

注意;

【讨论】:

  • 如果你这样做了,你应该把它包含在你的问题中。但就目前而言:unexpected $end 始终要么是缺失的 ;,要么是未关闭的 {(,因此您以后可以识别它:)
猜你喜欢
  • 2010-12-14
  • 2012-07-09
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多