使用短格式时"if"评估错误



执行类似的操作时

$date = mktime();
$xxx = 'if ( date("N",$date ) == 1 ) { return TRUE; } else { return FALSE; }';
$yyy = eval( $xxx );
echo $yyy;

它是有效的。

但当做这样的事情时

$date = mktime();
$xxx = '( date("N",$date) == 1 ? return TRUE : return FALSE );';
$yyy = eval( $xxx );
echo $yyy;

我收到一个类似的错误

分析错误:语法错误,在第1行的/my_path/my_file.php(107):eval()代码中出现意外T_RETURN

为什么?

这与eval完全无关。

让我们创建真实测试用例:

<?php
function foo()
{
   $date = mktime();
   ( date("N",$date) == 1 ? return TRUE : return FALSE );
}
foo();
?>

输出:

Parse error: syntax error, unexpected T_RETURN on line 5

return是一个语句,而不是一个表达式,所以你不能把它嵌套到一个表达式中,这就是你在这里要做的。条件运算符不是if/else的单行替换。

要正确使用条件运算符:

return (date("N",$date) == 1 ? TRUE : FALSE);

简化为:

return (date("N",$date) == 1);

在你的代码中,它看起来像这样:

$date = mktime();
$xxx = 'return (date("N",$date) == 1);';
$yyy = eval($xxx);
echo $yyy;

我很确定这应该是

$xxx = 'return ( date("N",$date) == 1 ? TRUE : FALSE );';

三元运算符生成的内容是值(表达式),而不是命令。

相关内容

  • 没有找到相关文章

最新更新