2013-12-17 4 views
2

PHP에서 truth에 대해 조금 혼란스러워합니다."someString"== 0이 PHP에서 true로 평가되는 이유

제 생각에 0은 false로 평가되고 문자열이 "0"이 아닌 한 비어 있지 않은 문자열은 true로 평가됩니다.

var_dump((bool) 0);    // prints "boolean false" 
var_dump((bool) 'someString'); // prints "boolean true" 

을하지만 그때 나는 다음과 같은 결과가 놀랍 : 왜 0=='someString' true로

var_dump((0=='someString'));  // prints "boolean true" 

내 질문을 평가합니까되어 나는 예상대로

이다?

+0

Nanne -이 연산자의 차이점을 이해합니다. 이것은 참/거짓이 다른 유형의'=='비교에서 어떻게 평가되는지에 대한 질문입니다. 다른 IMO. –

+0

php는 부드러운 타이핑 언어이며, 형식을 즉시 변환합니다. 0은 변경없이 사용 된 위치에 따라 문자열과 정수가 될 수 있습니다. –

+1

제목에 오류가 있습니다. "someString"== 0은 true로 평가되지 않습니다. 그것은 문자열 비교이지만 0 == "somestring"은 숫자 비교이기 때문에 수행합니다. –

답변

7

비교 연산자 (==)를 사용할 때 연산자 문자열은 다른 정수와 비교할 때 정수로 변환됩니다. 이는 type juggling in PHP 때문입니다. 따라서 "someString"은 정수로 변환되고 앞에 오는 자릿수가 없기 때문에 0으로 평가됩니다. 동일한 연산자 (===)를 사용하면 변환이 수행되지 않으므로 "someString"이 리터럴 문자열로 처리되므로 구문이 false로 평가됩니다.

저글링을 수행 할 때 다음 값은 false로 평가됩니다. 다른 모든 사실로 평가됩니다

  • ""(float로서 0) (정수로 0) (빈 문자열)
  • 0
  • 0.0
  • "0"(0으로 문자열)
  • NULL
  • FALSE
  • 배열() (하늘의 배열)
  • $ var에; (선언 된 변수이지만 값이없는 경우)
+0

이것은 부울이 아닌 정수로 변환하는 것입니다. – lonesomeday

+1

'=='은 정수로 변환되지만,이 답변의 요점입니다. – Nanne

+1

정수로의 변환이 부울 ​​결과의 원인입니다. – dockeryZ

관련 문제