티스토리 뷰

php7환경에서 작업중에 다음의 코드를 작성했는데 의도와는 다른 음직이을 보였다.

$zero = 0;
$val = "abc";

if ($zero == $val) {
...
}

 

if가 false가 되어야 한다고 생각했지만 true가 되었다.

이유를 알아보니 다음과 같은 이슈가 있었다.

 

PHP 7

0 == 'foobar' // true
0 == '' // true
4 == '4e' // true (4e is cast as a number and becomes 4)

 

PHP 8

0 == 'foobar' // false
0 == '' // false
4 == '4e' // false ('4e' is considered non-numeric therefore 4 is cast as a string and becomes '4')

 

즉 php7 에서는 int값과 비교를 할경우 비교값이 int로 형변환 된다는 점이다.

애시당초 넘어오는 값에 0를 사용하는 것은 피하면 좋겠지만 주의가 필요하다.

 

참고

 

'개발지식 > PHP' 카테고리의 다른 글

PHP Trait란  (0) 2024.08.29
PHP의 Null, 공백 체크  (0) 2023.11.14
PHP 7, 8변경점  (0) 2023.11.05