2014-03-25 2 views
0
function foo() { 
    return $result = bar() ? $result : false; 
} 

function bar() { 
    return "some_value"; 
} 

foo(); 

공지 사항 : 정의되지 않은 변수 :삼항 연산자를 사용하는 PHP 버그?

이 버그를 결과?

bar()는 $ result에 저장해야하지만 그렇지 않습니다. 그러나 operators precedence 때문이다

PHP 5.4.24

+0

가 왜 버그, 그것 $ 결과를 읽으려고하지만 그렇게 정의 밤은 당신에게 그것의 정의를 말하고있다 . 디자인에 나 같은 것 같습니다. –

+0

'bar()'에서 값을 얻고 있으므로'true' =>를 반환하여 정의되지 않은'$ result'를 할당합니다. 그게 뭐가 잘못 됐니? – Rikesh

+0

명백한 PICNIC 여기에 갈 .. :) –

답변

11

조건이 잘 작동하고 그것은 $ 결과 나 허위 진술 반환하려고 (경우 줄에()를 NULL 또는 거짓). Do

function foo() { 
    return ($result = bar()) ? $result : false; 
} 

- 할당이 더 높은 우선 순위로 평가됩니다.

function foo() { 
    return bar() ? $result : false; 
} 

function bar() { 
    return "some_value"; 
} 

foo(); 
+0

메이트 이것은 대단합니다. +1 –

+0

좋아요! 네 .. 괄호없이 $ 결과를 후속 조건 평가로 반환합니다. 감사! –

0

는 우리가 할 수 없습니다

function foo() { 
    return bar() ?: false; 
} 
+0

.. 그리고 당신은'$ result' 변수를 정의하지 않을 것입니다 (왜냐하면 그것을 반환하려고하기 때문입니다) –

1

더 우아한 해결책 :

관련 문제