정수와 문자열 비교: 흔하지 않은 현상 설명
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