0

当做类似的事情时

$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(107) 中的意外 T_RETURN:第 1 行的 eval() 代码

为什么 ?

4

2 回答 2

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;
于 2013-02-10T22:14:33.670 回答
3

我很确定应该是

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

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

于 2013-02-10T22:11:06.183 回答