使用“if”短格式时出现eval错误

时间:2013-02-10 22:07:37

标签: php eval parse-error

做类似

的事情
$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()代码

为什么?

2 个答案:

答案 0 :(得分:4)

这与eval没有任何关系。

让我们创建真正的测试用例:

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

foo();
?>

Output

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 );';

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