>백엔드 개발 >PHP 튜토리얼 >PHP의 `0 == 'e'`가 왜 True로 평가되나요?

PHP의 `0 == 'e'`가 왜 True로 평가되나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-16 07:32:18679검색

Why Does PHP's `0 ==

PHP의 놀라운 문자열-숫자 동일성: '0 == "e"' 변칙 탐구

PHP에서는 겉보기에 무해해 보이는 비교를 통해 코드 조각에서 알 수 있듯이 예상치 못한 결과가 발생합니다. 아래:

$item['price'] = 0;
if ($item['price'] == 'e') {
    $item['price'] = -1;
}

$item['price']를 0으로 초기화했음에도 불구하고 'e'가 가격에 할당되면 if 조건은 설명할 수 없이 true로 평가되어 0을 문자열 'e'와 동일하게 처리합니다. .

계시: 타입 캐스팅과 PHP == 연산자

범인은 비교를 수행하기 전에 피연산자를 동일한 유형으로 캐스팅하려고 시도하는 PHP의 == 연산자에 있습니다. 이 경우 정수 0을 문자열로 캐스팅합니다. 'e'는 유효한 정수가 아니므로 0이 되어 잘못된 일치가 발생합니다.

해결책: 엄격한 비교 수용

이러한 예외를 방지하려면 == 대신 === 연산자를 사용하는 것이 좋습니다. === 유형 강제를 포함하지 않는 엄격한 비교를 수행하여 동일한 유형의 값만 동일한 것으로 간주되도록 합니다.

PHP 8의 획기적인 변화

이전 버전과 크게 달라진 점은 PHP 8에서는 문자열 숫자 비교를 위한 수정된 동작을 도입했다는 것입니다. 숫자를 문자열로 변환하는 대신 PHP 8은 가능할 때마다 문자열을 숫자로 변환합니다. 이 변경 사항은 예상과 일치하여 0과 'e'가 더 이상 동일하지 않게 간주됩니다.

요약

PHP의 == 연산자는 비교할 때 놀라운 결과를 초래할 수 있습니다. 유형 캐스팅으로 인한 문자열과 숫자. 예상치 못한 동작을 방지하려면 엄격한 비교를 위해 === 연산자를 활용하는 것이 중요합니다. 또한 문자열 숫자 비교에 대한 PHP 8의 수정된 접근 방식은 코드의 일관성과 정확성을 향상시킵니다.

위 내용은 PHP의 `0 == 'e'`가 왜 True로 평가되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.