Php 使用“if”缩写形式时出现求值错误
当你做这样的事情时Php 使用“if”缩写形式时出现求值错误,php,eval,parse-error,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 $
$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;
它起作用了
但是当你做类似的事情时
$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_路径/my_文件中意外返回T_。php107:第1行的求值代码
为什么?我很确定这应该是正确的
$xxx = 'return ( date("N",$date) == 1 ? TRUE : FALSE );';
三元运算符生成的是值表达式,而不是命令。这与eval无关 让我们创建真正的测试用例:
<?php
function foo()
{
$date = mktime();
( date("N",$date) == 1 ? return TRUE : return FALSE );
}
foo();
?>
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;
谢谢,有时我看不到森林,因为所有的树-