>백엔드 개발 >PHP 튜토리얼 >문자열과 정수를 비교할 때 PHP의 느슨한 유형 비교가 예기치 않은 결과를 초래하는 이유는 무엇입니까?

문자열과 정수를 비교할 때 PHP의 느슨한 유형 비교가 예기치 않은 결과를 초래하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 13:35:13705검색

Why Does PHP's Loose Type Comparison Lead to Unexpected Results When Comparing Strings and Integers?

문자열과 정수 비교 이상

PHP에서 문자열과 정수를 비교할 때 예상치 못한 결과가 발생할 수 있습니다. 다음 코드를 고려해보세요.

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

if ($test1 == 0)
  echo "Test 1 is Equal!?";
if ($test2 == 0)
  echo "Test 2 is Equal!?";

// Returns: Test 1 is Equal!?

놀랍게도 $test1 비교는 숫자가 아닌 값에도 불구하고 true로 평가됩니다. 이 예외는 PHP의 느슨한 유형 변환 규칙에서 비롯됩니다.

문자열을 숫자로 변환

PHP 매뉴얼에 따르면:

"문자열이 평가될 때 숫자 컨텍스트에서 결과 값과 유형은 다음과 같이 결정됩니다.

  • 문자열에 '.', 'e' 또는 'E' 문자가 포함되어 있으면 부동 소수점으로 평가됩니다.
  • 그렇지 않으면 정수로 평가됩니다.

값은 문자열의 초기 부분에 의해 제공됩니다. 문자열이 유효한 숫자 데이터로 시작하면 이 값이 사용됩니다. 그렇지 않으면 값이 0이 됩니다. (영)."

이상 현상 설명

제공된 예에서 $test1에는 소수점, 지수 또는 선행 0이 포함되어 있지 않습니다. 따라서 초기값이 0인 정수로 해석됩니다. PHP에서는 0이 정수 0과 같으므로 비교 결과는 true로 평가됩니다.

$test2가 실패하는 이유

$test2 문자열에는 숫자가 아닌 문자도 포함되어 있습니다. 그러나 숫자로 시작하기 때문에 초기값은 3581169의 정수로 해석됩니다. 이 정수는 0이 아니므로 잘못된 비교가 발생합니다.

유형 이상 방지

이러한 예외를 방지하려면 항상 엄격한 유형 비교를 사용하세요. 제공된 예에서 다음과 같이 코드를 다시 작성할 수 있습니다.

if ($test1 === "0")
  echo "Test 1 is Equal!";
if ($test2 === "0")
  echo "Test 2 is Equal!?";

엄격한 비교 연산자 ===를 사용하면 값이 동일한 유형인지 확인하고 예상치 못한 결과를 방지할 수 있습니다.

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

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