2013-03-25 361 views
0

为什么我得到这个错误的代码在开发人员显示的实时演示和它的相同的代码?非常感激任何的帮助。解析错误:语法错误,意外':'

$method = $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ?: $_SERVER['REQUEST_METHOD']; 
+0

我不同意这个问题的关闭。初级程序员之间对高等运营商的误解是相当普遍的。 – 2013-03-25 16:15:13

+0

问题可能与PHP版本有关。 [“自PHP 5.3以来,可以省略三元运算符的中间部分.Expression expr1?:expr3返回expr1,如果expr1计算结果为TRUE,否则返回expr3。”](http://php.net/manual/ EN/language.operators.comparison.php)。如果您的PHP版本<<5.3,则不起作用。 – 2013-03-25 16:54:00

+3

**以下所有答案都是错误的。**这是一个PHP版本不匹配,上面的代码将在PHP> 5.3上工作,并在较低版本上失败。从[文档](http://php.net/ternary):从PHP 5.3开始,可以省略三元运算符的中间部分。如果expr1的结果为TRUE,则expr1?:expr3'返回expr1;否则返回expr3。所以,下面的答案都不能正确回答这个问题。正确的答案是:'$ method = $ _SERVER ['HTTP_X_HTTP_METHOD_OVERRIDE']? $ _SERVER ['HTTP_X_HTTP_METHOD_OVERRIDE']:$ _SERVER ['REQUEST_METHOD'];' – nickb 2013-03-25 16:54:06

回答

3

的问题是不符合事实的三元运算符缺少规定的参数作为其他。问题可能是服务器的PHP版本。

直从PHP doc

Since PHP 5.3, it is possible to leave out the middle part of the ternary operator. Expression expr1 ?: expr3 returns expr1 if expr1 evaluates to TRUE, and expr3 otherwise.

它被写入是有效的用PHP版本等于或高于5.3的任何服务器的方式。

否则应当重新写在它的等价表达式:

$method = $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ? $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] : $_SERVER['REQUEST_METHOD']; 
1

改变这种

$method = $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ?: $_SERVER['REQUEST_METHOD']; 

$method = $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ? "" : $_SERVER['REQUEST_METHOD']; 

OR

$method = $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ? NULL : $_SERVER['REQUEST_METHOD']; 
+0

没有第二个参数的三元运算符是完全有效的。 '$ a = $ x?:$ y'会将'$ x'分配给'$ a'。当第二个操作员失踪时,第一个操作员被视为第二个操作员。 [从PHP 5.3开始,可以忽略三元运算符的中间部分。表达式expr1?:如果expr1的计算结果为TRUE,则expr3返回expr1,否则返回expr3。](http://php.net/manual/en/language.operators.comparison.php)。真正的问题是关于PHP版本。 – 2013-03-25 16:54:52

相关问题