레거시 개발자를 위한 PHP 5.x·7.x와 PHP 8.x의 문자열·숫자 비교 방식 차이
PHP 5.x·7.x와 PHP 8.x의 문자열과 숫자 비교 방식 차이
PHP 5.x 및 PHP 7.x에서 개발한 웹사이트를 PHP 8.x로 이전할 때 주의해야 할 사항 중 하나는 문자열과 숫자의 비교 방식입니다.
PHP 8.0부터 숫자와 숫자가 아닌 문자열을 비교하는 규칙이 변경되었습니다.
1. PHP 5.x·7.x에서 실행한 결과
<?php
var_dump(0 == "abc"); // bool(true)
var_dump(0 == ""); // bool(true)
?>
PHP 5.x와 7.x에서는 숫자와 숫자가 아닌 문자열을 == 연산자로 비교할 때 문자열이 숫자로 변환됩니다.
따라서 위 코드에서는 문자열이 숫자 0으로 변환되어 true가 반환됩니다.
2. PHP 8.x에서 실행한 결과
동일한 코드를 PHP 8.x에서 실행하면 결과가 달라집니다.
<?php
var_dump(0 == "abc"); // bool(false)
var_dump(0 == ""); // bool(false)
?>
PHP 8.0부터 숫자와 숫자가 아닌 문자열을 비교할 때는 숫자를 문자열로 변환하여 비교합니다.
따라서 위 코드에서는 false가 반환됩니다.
3. PHP 버전별 비교 결과
PHP 5.x, PHP7.x
0 == "abc" // true
0 == "" // true
0 == "0" // true
10 == "10" // true
PHP 8.x
0 == "abc" // false
0 == "" // false
0 == "0" // true
10 == "10" // true
마무리
PHP 5.x 및 PHP 7.x에서 PHP 8.x로 이전할 때는 == 연산자를 사용한 숫자와 문자열 비교 코드를 확인해야 합니다.
자료형까지 비교하려면 === 연산자를 사용할 수 있지만 기존 코드를 무조건 변경하면 동작이 달라질 수 있으므로 주의해야 합니다.

웹마당넷
오렌지
댓글 0