Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用“if”缩写形式时出现求值错误_Php_Eval_Parse Error - Fatal编程技术网

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;

谢谢,有时我看不到森林,因为所有的树-