2012-05-26 3 views
0
if ("false" == 0) echo "true\n"; 
// => true 

는 PHP 문서를 말한다 동안 :이것은 PHP 버그입니까? ("false"== 0)?

var_dump((bool) "false"); // bool(true) 

그것은 내가 그것을 제기 할 수 있습니다 버그가 있다면?

+0

false는 부울 false입니다. ''거짓 '과''거짓''은 거짓이라는 단어를 포함하는 문자열입니다. 비어 있지 않은 문자열은 부울 true로 평가됩니다. –

답변

8

아니요, 아니요 버그입니다. 그것을 제기하는 것을 괴롭히지 말라.

이 겉으로보기에는 일관성없는 동작은 "거짓"이라는 단어와 아무런 관련이 없습니다. 문자와 숫자만으로 구성된 문자열과 비교해야하므로 비교할 정수로 캐스팅 된 경우 (== 0) 결과는 0이되어 0 == 0이 true로 평가됩니다.

0으로 다른 알파벳 문자열을 비교할 경우 동일한 결과를 얻을 것이다 : 그것은 다른 데이터 유형의 값을 비교하는 문서화 기능은 버그

"abcd" == 0 
"a" == 0 
"true" == 0 
5

입니다하지 않습니다 -이 경우에는 , 문자열을 정수로. PHP는 비교를 할 문자열을 정수로 변환하고, "거짓"을 참조하십시오 0

로 변환 the manual :

당신은 문자열과 숫자를 비교하거나 비교는, 숫자 문자열을 포함하는 경우 각 문자열은 숫자로 변환되고 비교는 숫자로 수행됩니다. 문자열이 유효한 숫자 데이터로 시작하면

string to number conversion

에이 페이지를이 사용되는 값이됩니다. 그렇지 않으면 값은 0입니다.

은 고정 유형과 비교를 사용하여이 문제를 방지하려면 :

if ("false" === 0) echo "true\n"; 
0

문제는 당신이 엄격한 비교를 사용하지 않는 PHP 변수를 캐스트이다. 언급 된 다른 사람과 마찬가지로 문자열 "false"이 정수로 캐스팅되고 있습니다.

당신은 타입 캐스팅을 사용하지 않고 비교하고 싶은 경우

"false" === 0 
0

이 도움이 될 :

  • 실제 부울 거짓
  • NULL 값 :이 PHP 거짓 간주하는 유일한 것들을 (비어 있음)
  • 정수 0
  • 텍스트의 문자열 비교를 피하고 부울을 사용하십시오!

    관련 문제