2013-04-25 3 views
0

나는이 주위에 내 머리를 감싸는 약간의 문제가 오전, 그래서 내가 그것을 물어볼 것입니다 생각 .. PHP 조건 연산자는

는이 코드를 :

In 1, `string` gets converted to number, which becomes `0` so condition is true 
In 2, `string` is a value, so condition is true 
In 3, `true` is not equal to `0` so condition is false 

개별적으로 모두 의미가 있지만 순서는 다릅니다. PHP의 조건부 연산자가 not transient이기 때문에 많은 사람들이 그렇다고 들었습니다. 누군가가 그 의미와 그 의미를 설명 할 수 있습니까?

+0

나는 그것이 문자열이 비어 있는지 확인하는 것이 2 가정이 문장은 무슨 일이 일어나고 생각 변수 변경을 수행합니다. 3의 경우, int 0에 해당하는 bool은 거짓입니다. – Virus721

+0

실제로'$ x'의 값을 변경하고 평가하는 중입니다 ... 그래서 이상하게 보일 수도 있지만 의미가 있습니다. true "와"(int) true == 1 "... 또한'(string) false ==" "'와'((int) string) true == "1"'* shrugs * – CD001

답변

0

왜 세계에서 의미가 없습니까? x의 값을 절대로 변경하지 않으므로 해당 진술은 원래 값 x 인 "문자열"에 따라 달라집니다.

x은 첫 번째 var_dump에서 0으로 변경되지만 변경되지는 않습니다. 단지 0/false와 비교됩니다.

var_dump(($x = 0) == 0); 

또는 :

var_dump(($x = false) == 0); 
+0

그래서 일시적이지 않음을 설명 할 수 있습니까? –

+0

Well transient는 일시적인 것을 의미합니다. "조건부 연산자는 일시적이 아닙니다."라는 의미가 확실하지 않지만 "조건부 연산자는 일시적입니다"라고 말할 수 있다고 생각합니다. 변수에 새로운 값을 할당하지 않고 일시적으로 다른 값과 비교하기 때문에 일시적이라고 말할 수 있습니다. –

+0

그 말이 맞는 것 같아요. –