PHP의 == 연산자 문자열 비교 사용법과 부작용 예에 대한 자세한 설명

伊谢尔伦
풀어 주다: 2023-03-10 22:00:01
원래의
1416명이 탐색했습니다.

경우에 따라 PHP는 숫자 데이터(예: 숫자를 포함하는 문자열 등)를 수치 처리로 변환하며 == 연산자가 그 중 하나입니다. == 연산자를 사용하여 두 문자열을 느슨하게 비교할 때 PHP는 비교를 위해 숫자 문자열을 숫자 값으로 변환합니다. 다음 실험은 이 결론을 확인합니다.

<?php
var_dump(&#39;01&#39; == 1);
?>
로그인 후 복사

위 코드의 출력 결과는 다음과 같습니다. 따라서 문자열을 비교할 때는 === 연산자를 사용하여 문자열을 엄격하게 확인하거나, 발생할 수 있는 문제를 피하기 위해 strcmp()와 같은 함수를 사용하는 것이 좋습니다.


또한 일반적으로 사용되는

in_array

() 함수에도 약한 유형 문제가 있습니다. 다음 코드를 참조하세요.

<?php
var_dump(in_array(&#39;01&#39;, array(&#39;1&#39;)));
?>
로그인 후 복사

위 코드의 출력 결과는 다음과 같습니다.

bool(true)

나는 믿습니다. 이 PHP를 사용해 본 적이 있는 기능에 대한 보안 검사를 수행하는 프로그래머들은 이것이 어떤 종류의 보안 문제를 일으킬지 모두 알고 있습니다. 그렇죠? 다행히 in_array() 함수는 세 번째 매개변수를 제공합니다. 이를 true로 설정하면 다음 코드에 표시된 대로 in_array() 함수의 필수 유형 검사 메커니즘을 켤 수 있습니다.

<?php 
var_dump(in_array(&#39;01&#39;, array(&#39;1&#39;), true)); 
?>
로그인 후 복사

출력 결과는 다음과 같습니다. bool(false)

PHP는 약한 유형의 언어이기 때문에, 즉 PHP에서는 데이터 유형의 개념이 약합니다. 따라서 프로그래밍할 때 데이터 유형을 너무 많이 무시하면(이는 대부분의 PHP 프로그래머의 일반적인 문제이기도 함) 일부 문제가 발생하고 심지어 보안 취약점도 발생합니다. 마지막으로, 짜증나는 속담처럼 외부 데이터를 엄격하게 확인하고 필터링하세요.

부작용

$a = &#39;212345678912000005&#39;; 
$b = &#39;212345678912000001&#39;; 
var_dump($a == $b);
로그인 후 복사
이 코드의 출력은 bool(true)입니다. 즉, 이 판단은 in_array() 함수의 세 번째 매개변수가 false일 때 두 개가 동일하다는 결론을 내릴 것임을 의미합니다. 또는 설정되지 않은 상황입니다. 먼저 문자열이 숫자인지 확인한 다음 이를 long 또는 double(C 언어

데이터 유형)로 변환한 다음 zendi_smart_strcmp를 사용하십시오. 그러나 소스 코드의 주석에는 다음과 같이 나와 있습니다. 문은 오버플로 상황을 고려합니다

} else if (dval1 == dval2 && !zend_finite(dval1)) { 
    /* Both values overflowed and have the same sign, 
     * so a numeric comparison would be inaccurate */ 
    goto string_cmp; 
}
로그인 후 복사
dval1과 dval2는 두 문자열을 double 유형으로 변환한 후의 값입니다. 그런데 왜 여전히 이렇습니까? 해결 방법, 두 개의 등호 " 대신 "===" 세 개의 등호를 사용하세요. ==", in_array() 함수에 의해 설정됨 세 번째 매개변수는 true입니다: in_array('val', $array, true).

위 내용은 PHP의 == 연산자 문자열 비교 사용법과 부작용 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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