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 중국어 웹사이트의 기타 관련 기사를 참조하세요!