"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP의 느슨한 문자열 대 정수 비교가 때때로 예상치 못한 결과를 반환하는 이유는 무엇입니까?

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

2024년 12월 23일에 게시됨
검색:493

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로 평가됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3