2013-03-25 619 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

相關問題