문자열과 정수 비교 이상
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 매뉴얼에 따르면:
"문자열이 평가될 때 숫자 컨텍스트에서 결과 값과 유형은 다음과 같이 결정됩니다.
값은 문자열의 초기 부분에 의해 제공됩니다. 문자열이 유효한 숫자 데이터로 시작하면 이 값이 사용됩니다. 그렇지 않으면 값이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!