2013-03-25 7 views
0

이 오류가 발생하는 이유는 개발자가 보여주는 라이브 데모와 동일한 코드에서 작동합니다. 어떤 도움이라도 대단히 감사 할 것입니다.구문 분석 오류 : 예기치 않은 구문 오류 '

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

는이 질문의 폐쇄에 동의하지 않는다. 3 차 연산자에 대한 오해는 초보 프로그래머들에게는 매우 일반적입니다. –

+0

문제는 아마도 PHP 버전 일 것입니다. [ "PHP 5.3부터는 삼항 연산자의 중간 부분을 생략 할 수 있습니다 .expression expr1? : expr1은 expr1이 TRUE이면 expr1을, 그렇지 않으면 expr3을 반환합니다."] (http://php.net/manual/ en/language.operators.comparison.php). PHP 버전이 5.3보다 작 으면 작동하지 않습니다. –

+3

** 아래의 모든 대답이 잘못되었습니다. ** 이것은 PHP 버전이 맞지 않아 위의 코드가 PHP> 5.3에서 작동하고 더 낮은 버전에서는 실패합니다. [the docs] (http://php.net/ternary)에서 : PHP 5.3부터 3 진 연산자의 중간 부분을 생략 할 수 있습니다. 표현식'expr1? : expr3'은'expr1'이'TRUE'로 평가되면'expr1'을, 그렇지 않으면'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.

가 같거나 5.3 위 PHP 버전과 임의의 서버에 유효한 기록되는 방법. 그렇지

은이 이에 상응하는 표현으로 다시 작성해야합니다

$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'는'$ a'에'$ x'를 대입합니다. 두 번째 연산자가 누락되면 첫 번째 연산자가 두 번째 연산자로 사용됩니다. [PHP 5.3부터는 삼항 연산자의 중간 부분을 생략 할 수 있습니다. Expression expr1? : expr1은 expr1이 TRUE이면 expr1을, 그렇지 않으면 expr3을 반환합니다.] (http://php.net/manual/en/language.operators.comparison.php). 진짜 문제는 PHP 버전에 관한 것입니다. –

관련 문제