做类似
的事情$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;
我收到类似
的错误解析错误:语法错误,/ my_path / my_file.php中的意外T_RETURN(107):第1行的eval()代码
为什么?
答案 0 :(得分:4)
这与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;
答案 1 :(得分:3)
我很确定应该是
$xxx = 'return ( date("N",$date) == 1 ? TRUE : FALSE );';
三元运算符生成的东西是值(表达式)而不是命令。