2012-05-07 1 views
2

그래서이 문제는 있지만, 나는 눈이 멀다. 이 수술을 할 수있는 표현이 아니기 때문에 심지어PHP 삼항 구문 문제 (너무 오래 코딩 됨)

isset($items['blog']) ? unset($items['blog']) : NULL; 

Parse error: syntax error, unexpected T_UNSET

+0

오류는 'unset'에 대한 토큰 인 'T_UNSET'이 해당 라인에서 예상치 못한 오류라고 말합니다. 즉, 그 장소에 배치 할 수 없다는 의미입니다. 그게 다야. 그것을 제거하면 괜찮습니다. 이것은 삼항 연산자 btw와는별로 관련이 없습니다. – hakre

답변

1

@Bryan 지적, 더 기능에게 삼항 연산자 내에서 언어 구조에 전화를. 그래도 반환 값이 없기 때문에 다음을 수행하십시오.

unset($items['blog']); 

값이 미리 설정되어 있는지 여부를 확인할 필요가 없습니다. 그렇지 않은 경우 unset은 단순히 아무 것도하지 않습니다.

+0

3 진 연산자에서 함수 호출에 문제가 없습니다. 그러나 unset은 함수가 아니라 언어 구조입니다. 그것이 작동하지 않는 이유입니다. 그러나 귀하의 제안은 여전히 ​​현명한 제안 일 뿐이며, 올바른 설명이 아닙니다. – hakre

+0

@hakre 다른 게시물을 편집 한 것을 알고 있지만 거기에 댓글을 달지 않았으므로 @ 할 수는 없습니다. 당신이 알고 있듯이'if'와'for'는 언어 구조가 아닙니다. 전체 구문 목록은이 페이지에서 예약어의 세 번째 범주입니다. http://php.net/manual/en/reserved.keywords.php – Paulpro

+0

@ PaulP.RO : 여기 언어 구조에 대한보다 편안한 견해를 가지고 있습니다. 나는'if' 나'for'를 가진 예제가 더 좋다고 생각합니다. 왜냐하면 :'isset'은 작동합니다 : http : // codepad.org/MCSHpbTG – hakre

4

회 (PHP Comparison Operators) 문서를 읽고 나면 당신은 삼항 연산의 내부 해제 사용할 수 없습니다. 언어 구조 (예 : issetecho)이므로 배치 할 수 없습니다.

는 그냥 사용하고 괜찮아요은, 어떤 결정이 필요하지 않습니다 :

unset($items['blog']); 
+0

실망 스럽지만, 당신의 지혜는 높이 평가됩니다;) – Merrick

+2

추가 정보, 실제로 if 문은 필요 없습니다. 키가 존재하지 않으면 unset ($ items [ 'blog']) 오류를 반환하지 않습니다. 아마도 이것이 최선의 방법 일 것입니다. – Bryan

+3

이것은 사실이 아닙니다. 삼항 연산자 내에서 함수를 실행할 수 있습니다. http://codepad.org/X5bDeXwb – Paulpro

1

오류가 발생하면 해당 라인에서 T_UNSET (즉, tokenDocsunset)이 예기치 않게 발생합니다. 즉, 그 장소에 배치 할 수 없다는 의미입니다. 그게 다야. 를 제거하고 당신은 괜찮아요 :

이는 삼항 연산자 BTW와 함께 할 일이 많이하지를 가지고 있으며, 코드의 예와 같이, 당신은 어쨌든 unset에 대한 그 운영자가 필요하지 않습니다
unset($items['blog']); 

..

isset($items['blog']) ? eval('unset($items[\'blog\'])') : NULL; 

을하지만 그 때문에 매우 솔직하지 심각한 제안이 아니다 : 당신이 아주 많이 삼항 연산자를 사랑한다면

, 당신은 설정되지 않은 평가 후면 수 있습니다.

0

벤치 마크와 관련된 제안 사항 : 예를 들어보기에 있어야하거나 정말로 한 줄의 코드 만 필요로 할 때만 삼항 구문을 사용하십시오. 그러므로 else 연산자가 훨씬 빠르다면

+0

흥미 롭; 이것을 시험해 보았거나 그 차이를 눈치 채셨습니까? 이것은 또한 너무 나쁘지 않습니다. 삼중 문자가 if/else보다 읽기 쉽지는 않지만, 나는 편리함을 좋아합니다. – Merrick

관련 문제