2009-05-15 4 views
2
$foo = 0; 

if($foo == 'on') $foo = 1; 

echo $foo; 

위의 코드는 "0"을 출력해야합니다. 그러나 그것은 분명히 $foo == 'on' 결과가 TRUE인데, 분명히 잘못되었습니다. 표현식을 $foo === 'on'으로 바꾸면 올바른 답을 얻을 수 있기 때문에 타이핑 문제 일 수 있습니다.PHP에서 이상한 부울 표현 해결

그럼에도 불구하고, 어떻게 PHP는 $foo'on'$foo 경우와 'on'도 같은 유형이 아닌이라고 생각합니까? 이 버그 또는 이상한 기능인가요?

답변

3

php는 문자열의 느슨한 비교 (==)이며 int 0이 True로 평가됩니다. 엄격한 비교 (===)도 같은 유형을 비교하는 반면 부스 변수가 문자열 또는 int 인 경우 비교된다는 것을 의미합니다. 그러나 이것은 $ foo가 int이고 'on'이 문자열이기 때문에 false로 평가됩니다. http://php.net/types.comparisons

3

this is a documented behaviour : 당신이 정수를 문자열과 비교하면

, 문자열이 숫자로 변환됩니다 또한 php.net에 비교 테이블을 참조하십시오. 두 개의 숫자 문자열을 비교하면 정수로 비교됩니다. 이 규칙은 switch 문에도 적용됩니다.

관련 문제