PHP 비교연산자는 다음과 같은 결과가 나온다.


0   ==  '-' // TRUE

0   === '-' // FALSE

'0' ==  '-' // FALSE


제일 처음에 있는 숫자 0 과 문자/문자열을 비교하는 부분이 TRUE가 나오는게 예상 밖이다.

숫자 0 과 문자 혹은 문자열을 == 으로 비교할 때 PHP가 문자/문자열을 0 으로 타입캐스팅 해버리는 게 궁극적인 문제이다.


과정을 설명하자면 다음과 같다.


// 아래 문장을 만나면

0 == '-' 

// PHP는 아래처럼 내부적으로 타입캐스팅을 하고,

0 == (int)'-'

// PHP는 숫자가 아닌 문자는 전부 0 으로 타입캐스팅을 하므로 아래처럼 숫자0과 숫자0의 비교를 하게되고

0 == 0 

// 결과적으로 0 == '-' 은 TRUE가 된다.



비교구문의 변수에 숫자 0 이 절대 안들어간다는 보장이 있으면 모르겠는데,

그게 아닐 경우에는 왠만하면 타입까지 전부 비교하는 === 을 사용하는 쪽으로 가닥을 잡는 수 밖에는 없을 듯 하다.



예전에 올렸던 포스팅과 결국은 같은 문제이다.


http://bloodguy.tistory.com/entry/PHP-inarray-사용시-integer-0-주의-1






Posted by bloodguy
,