의도하지 않은 진실: strpos() 비교의 불일치 이해
문자열 검색에 일반적으로 사용됨에도 불구하고 PHP 함수 strpos()는 결과를 사실과 비교할 때 관습에 얽매이지 않는 행동입니다. 이 예외를 이해하기 위해 코드 조각을 살펴보겠습니다.
$link = 'https://google.com'; $unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png']; foreach ($unacceptables as $unacceptable) { if (strpos($link, $unacceptable) === true) { echo 'Unacceptable Found<br />'; } else { echo 'Acceptable!<br />'; } }
놀랍게도 이 코드는 "Acceptable!"을 인쇄합니다. $unacceptables 배열의 모든 요소에 대해 $link 변수에 "https:"가 있더라도 마찬가지입니다.
이 퍼즐을 풀려면 strpos()의 의미를 자세히 살펴봐야 합니다. 문서에 나와 있듯이 strpos()는 $link 내에서 $unacceptable 문자열의 "첫 번째 발생의 숫자 위치"를 반환합니다. 이 경우 strpos()는 위치 0에서 "https:"를 찾아 PHP에서 실제 값인 0을 반환합니다.
따라서 if 문의 조건(strpos($link, $unacceptable) === true)는 strpos()가 항상 부울 true로 강제 변환되는 숫자 위치를 반환하기 때문에 매번 true로 평가됩니다.
수정하려면 이를 위해서는 엄격하지 않은 비교 연산자(!==)를 사용해야 합니다.
if (strpos($link, $unacceptable) !== false) {
비교를 "false와 같지 않음"으로 변경하여 strpos가 있을 때만 if 문이 true로 평가되도록 보장합니다. ()는 일치하는 항목을 찾아 0이 아닌 값(즉, 0이 아닌 모든 숫자 위치)을 반환합니다.
위 내용은 PHP 문자열 검색에서 `=== true`와 strpos() 비교가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!