>백엔드 개발 >PHP 튜토리얼 >PHP에서 strpos()와의 느슨한 비교가 예상치 못한 결과를 초래하는 이유는 무엇입니까?

PHP에서 strpos()와의 느슨한 비교가 예상치 못한 결과를 초래하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 10:38:09944검색

Why Does Loose Comparison with strpos() in PHP Lead to Unexpected Results?

strpos() 반환 값의 느슨한 해석으로 인해 예상치 못한 결과가 발생함

문자열 내에서 특정 하위 문자열을 찾으려는 과정에서 다음과 같은 문제가 발생합니다. PHP의 strpos() 함수를 사용할 때 의도하지 않은 결과를 초래할 수 있는 함정. strpos() 반환 값을 느슨하게 검사하면 혼란이 발생할 수 있는 이유에 대한 미스터리를 풀어보겠습니다.

아래 코드 조각을 고려하세요.

if (
    strpos($grafik['data'], $ss1) != false
    && strpos($grafik['data'], $ss2) != false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

이 코드에서는 strpos()를 사용하여 다음을 결정합니다. $grafik['data'] 문자열 내 하위 문자열 $ss1 및 $ss2의 위치. 두 하위 문자열이 모두 있는지 확인하고 $ss1이 $ss2보다 먼저 정렬되는지 확인하는 것이 목적입니다.

PHP 매뉴얼에 따르면 strpos()는 하위 문자열을 찾을 수 없으면 false를 반환합니다. 그러나 하위 문자열이 0 위치(즉, 문자열의 시작)에서 시작하면 strpos()가 0을 반환한다는 사실이 발견되었습니다. 이로 인해 표현식:

strpos($grafik['data'], $ss1) != false

이 다음과 같이 평가되는 의도하지 않은 해석이 발생합니다. $ss1이 0 위치에 있음에도 불구하고 false입니다. 범인은 0을 false와 동일하다고 간주하는 약한 등가 연산자 !=입니다.

이 문제를 해결하려면 대신 엄격한 등가 연산자 ===를 사용해야 합니다.

if (
    strpos($grafik['data'], $ss1) !== false
    && strpos($grafik['data'], $ss2) !== false
    && strpos($grafik['data'], $ss1) < strpos($grafik['data'],$ss2)
)

=== 연산자는 엄격한 비교를 수행하여 0이 false와 동일한 것으로 간주되지 않도록 합니다. 이 수정을 통해 코드는 $ss1 및 $ss2의 존재 여부와 상대적 위치를 올바르게 결정합니다.

위 내용은 PHP에서 strpos()와의 느슨한 비교가 예상치 못한 결과를 초래하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.