2013-03-25 5 views
0

Почему я получаю эту ошибку, код работает на живой демонстрации разработчика и ее же кода? Любая помощь будет оценена по достоинству.Ошибка анализа: синтаксическая ошибка, неожиданный ':'

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

Я не согласен с закрытием этого вопроса. Непонимание третичного оператора довольно распространено среди начинающих программистов. –

+0

Проблема, вероятно, в версии PHP. ["Начиная с PHP 5.3, можно оставить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае."] (Http://php.net/manual/ ен/language.operators.comparison.php). Если ваша версия PHP составляет <5.3, это не сработает. –

+3

** Все приведенные ниже ответы неверны. ** Это несоответствие версии PHP, приведенный выше код будет работать на PHP> 5.3 и не работать в более низких версиях. Из [docs] (http://php.net/ternary): Начиная с PHP 5.3, можно оставить среднюю часть тернарного оператора. Выражение 'expr1?: Expr3' возвращает' expr1', если 'expr1' оценивает' TRUE' и 'expr3' в противном случае. Итак, ни один из ответов ниже не будет правильно отвечать на этот вопрос. Правильный ответ: '$ method = $ _SERVER ['HTTP_X_HTTP_METHOD_OVERRIDE']? $ _SERVER ['HTTP_X_HTTP_METHOD_OVERRIDE']: $ _SERVER ['REQUEST_METHOD']; ' – nickb

ответ

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.

Else он должен быть переписан в эквивалентном выражении:

$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']; 

ИЛИ

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

Тернарный оператор без второго аргумента полностью действует. '$ a = $ x?: $ y' присваивает' $ x' '$ a'. Когда второй оператор отсутствует, первый берется как второй. [Начиная с PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.] (Http://php.net/manual/en/language.operators.comparison.php). Реальная проблема касается версии php. –

Смежные вопросы