执行类似的操作时
$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 );';
三元运算符生成的内容是值(表达式),而不是命令。