> 백엔드 개발 > PHP 튜토리얼 > PHP의 느슨한 문자열 대 정수 비교가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?

PHP의 느슨한 문자열 대 정수 비교가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-14 02:11:14
원래의
367명이 탐색했습니다.

Why Does PHP's Loose String-to-Integer Comparison Sometimes Return Unexpected Results?

정수와 문자열 비교: 흔하지 않은 현상 설명

PHP에서 문자열을 정수와 비교하면 때때로 이상한 결과가 나올 수 있습니다. 이러한 혼란은 특히 문자열을 값 0과 비교할 때 PHP의 느슨한 비교 동작에서 비롯됩니다.

다음 코드를 고려하세요.

$test1 = "d85d1d81b25614a3504a3d5601a9cb2e";
$test2 = "3581169b064f71be1630b321d3ca318f";

if ($test1 == 0)
  echo "Test 1 is Equal!?";
if ($test2 == 0)
  echo "Test 2 is Equal!?";
로그인 후 복사

놀랍게도 이 코드의 출력은 다음과 같습니다.

Test 1 is Equal!?
로그인 후 복사

왜 이러는 걸까요? 발생합니까?

문자열을 숫자로 변환하는 방법에 대한 PHP 문서에 따르면 문자열이 숫자 컨텍스트(예: 비교)에서 평가될 때 내용에 따라 부동소수점 또는 정수로 변환됩니다. . 문자열에 '.', 'e' 또는 'E'와 같은 문자가 포함되어 있으면 부동 소수점으로 처리됩니다. 그렇지 않으면 정수로 간주됩니다.

$test1의 경우 문자열에 숫자가 포함되어 있지 않으므로 정수 값 0으로 변환됩니다. 이것이 $test1 == 0 비교가 평가되는 이유입니다.

$test2가 왜 작동하지 않나요?

$test2도 다음으로 시작합니다. 숫자가 아닌 문자인데 왜 0이 아닌가? 이는 문자열의 시작 부분에 문자 '3'이 포함되어 있기 때문입니다. PHP 문서에 따르면 유효한 숫자는 기호(선택 사항)로 시작하고 그 뒤에 숫자가 옵니다. 따라서 $test2는 값이 0인 부동 소수점으로 변환되고 $test2 == 0 비교는 false로 평가됩니다.

위 내용은 PHP의 느슨한 문자열 대 정수 비교가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿