PHP 비교 연산자를 도입하려는 아이디어와 기존 비교 방법의 차이점은 무엇입니까?

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

PHP의 비교 연산자는 약간 이상하고 실수하기 쉽습니다. 비교 규칙은 다음과 같습니다.

1 두 문자의 크기를 비교할 때 두 문자의 ASCII 코드 크기를 비교합니다. 이해하다.

2. 두 문자열의 크기를 비교할 때 첫 번째 문자부터 시작하여 해당 ASCII 크기를 비교합니다. 특정 해당 위치에서 시작하는 한 한 문자열의 현재 위치 문자가 다른 문자열보다 큽니다. 위치 문자에 해당합니다. 즉, 'ba'>'az'와 같이 두 문자열의 크기를 직접 결정할 수 있습니다. 이는 누구나 알고 있습니다.

그럼 '10'과 'a'를 비교하면 당연히 여전히 동일합니다. 먼저 '1'과 'a' ASCII 코드를 비교해 보면 'a'가 더 큽니다.

3. 숫자를 문자열/문자와 비교할 때 시스템은 먼저 문자열/문자를 정수/부동 소수점 유형으로 변환하려고 시도한 다음 이를 비교합니다. 예를 들어 '12bsd'는 12로 변환됩니다. a'는 0으로 변환되는데, 이때 해당 ASCII코드 값은 숫자와 비교되지 않는다는 점에 유의해야 한다.

사실 같은 이유인데, 'a'+10의 결과도 10입니다.

무시하기 쉬운 점: 0을 숫자로 변환할 수 없는 문자열(연산자는 ==)과 비교하면 둘 다 true를 반환합니다.

결국 다음과 같은 결과가 나옵니다.

var_dump(&#39;1000000&#39;<&#39;a&#39;);    //result: boolean true
var_dump(&#39;a&#39;<1);            //result: boolean true
var_dump(1<&#39;1000000&#39;);      //result: boolean true
로그인 후 복사

기존의 생각과는 조금 다릅니다. .

두 문자열이 같은지 비교하는 가장 일반적인 방법은 "==="를 사용하여 판단하는 것입니다. 간단히 말해서 전자는 "동일"에 대한 동일한 요구 사항을 강조합니다. 유형; 후자는 "같음"이 필요하며 값은 동일합니다. 또는 strcmp를 사용하여 판단하면 두 문자열이 같은지 여부를 알 수 있지만 어디가 다른지는 알 수 없습니다.

  일반적으로 !=, ==를 사용하여 두 개체가 동일한지 비교할 수 있습니다. 두 개체가 반드시 모두 문자열일 필요는 없고 정수일 수도 있기 때문입니다.
 비교를 위해 !==,===(추가 등호를 볼 수 있음)를 사용하는 경우 두 객체의 유형은 true를 반환하기 위해 엄격히 동일해야 합니다. 그렇지 않으면 ==,!=를 사용하면 문자열이 다음과 같습니다. 비교를 위해 해당 유형으로 자동 변환됩니다.

22 == "22"; // Return true
22 === "22"; // Return false

이 때문에 우리 프로그램에서는 종종 예상치 못한 일이 발생합니다. Unexpected":

0 == "I love you"; // Return true
1 == "1 I love you"; // Return true

PHP 튜토리얼에도 이러한 문자열 비교 세트가 있습니다. strcmp, strcasecmp, strncasecmp(), strncmp(), 전자가 후자보다 크면 모두 0보다 큰 정수를 반환하고, 전자가 후자보다 작으면 둘 다인 경우 0보다 작은 정수를 반환합니다. 동일하면 0이 반환됩니다. 비교 원칙은 다른 언어의 규칙과 동일합니다.

strcmp는 대소문자 구분(즉, 대소문자 구분) 문자열 비교에 사용됩니다.
echo strcmp("abcdd", "abcde") // "b"와 "b"를 비교하여 1(>0)을 반환합니다

strcasecmp는 대소문자를 구분하지 않는 문자열 비교에 사용됩니다.
echo strcasecmp("abcdd", "abcde") // "d"와 "e를 비교하면 -1(<0)을 반환합니다. "

strncmp를 사용하여 비교합니다. 세 번째 매개변수는 비교할 길이입니다.
echo strncmp("abcdd", "abcde", 3) // 1(>0)을 반환하고 abc를 비교합니다. abc

strncasecmp는 문자열의 시작 부분부터 시작하여 대소문자를 구분하지 않고 문자열의 일부를 비교하는 데 사용됩니다. 세 번째 매개변수는 비교할 길이입니다.
echo strncasecmp( "abcdd", "abcde", 3); // 0을 반환하고 abc와 abc를 비교합니다. 대소문자를 구분하지 않으므로 동일합니다.

또 다른 상황은 단순히 문자열 크기를 비교하면 미리 결정된 요구 사항을 충족할 수 없다는 것입니다. 예를 들어 일반적으로 10.gif는 5.gif보다 크지만 위 기능을 적용하면 -1이 반환되므로 10.gif가 됩니다. 이 상황을 위해 PHP는 자연스럽게 대조되는 두 가지 함수인 strnatcmp, strnatcasecmp를 제공합니다.

echo strnatcmp("10.gif", "5.gif") // Return 1 (>0)
echo strnatcasecmp("10.gif", "5.gif"); // 1(>0)을 반환합니다.

PHP에서는 ==를 사용하는 것이 신뢰할 수 없습니다. 변수가 동일한 유형이더라도 ==가 true라고 해서 실제로 동일하다는 의미는 아닙니다. 따라서 PHP에서 비교를 위해 ===를 사용해 보십시오. ==를 사용하기 전에 반드시 두 번 생각하십시오. PHP에서 === 연산은 ZEND_IS_IDENTICAL입니다. PHP는 값 유형을 변경하려고 시도하지 않으며 매우 엄격하며 비교 속도가 더 빠릅니다. 예:

$aa = &#39;88.&#39;;//多个点
$b = &#39;88&#39;;
if($aa == $b) 
echo "相等";
로그인 후 복사

得到的结果是相等。因为88是一个数字,php会自动转换成整型或者浮点型进行==比较,当然会相等; strcmp是强制转换成string类型比较,===是要求数值一样并且类型一样 88是int类型,88.是浮点类型,当然不一样。用恒等 === 则 不会得到相等的结论.用strcmp()也不会得到相等的结论.所以最好不要使用 == 作为字符串相等比较.改用strcmp();

       对于俩个字符串, 会首先判断他们是否是numeric_string, 如果是,那么就会转换成整形来比较.. 那么什么是numeric string呢? 因为PHP不区分类型, 所以它采用一个策略, 当你的变量看起来是一个数字的时候, 那么她就认为这个变量是一个数字,然后转换为整形来比较。

위 내용은 PHP 비교 연산자를 도입하려는 아이디어와 기존 비교 방법의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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