PHP에서 strpos 함수는 다른 문자열에서 문자열이 먼저 나타나는 위치를 찾는 데 사용됩니다. 대상 문자열에 지정된 하위 문자가 발견되지 않으면 strpos는 false를 반환합니다. 그러나 False 는 PHP에서 "False value"로 간주되므로 반환 값을 다룰 때, 특히 반환 값이 0 (문자열의 시작 위치)과 혼동 될 때 일부 프로그래머간에 혼란을 야기 할 수 있습니다. 이 기사에서는 Strpos가 거짓을 반환하는 이유, 트랩 사용 및 이러한 상황을 효과적으로 처리하는 방법을 철저히 분석합니다.
strpos 함수의 프로토 타입은 다음과 같습니다.
<span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$ haystack : 검색 할 문자열.
$ 바늘 : 찾을 수있는 서브 스트링.
$ OFFSET : 선택 사업 시작 오프셋, 검색 시작 위치를 지정합니다.
$ beless가 $ haystack 에 존재하면 Strpos는 $ beless가 처음 나타나는 위치를 반환합니다 (색인은 0에서 시작). $ 바늘을 찾지 못하면 False가 반환됩니다.
PHP에서 거짓은 "거짓 가치"로 취급되므로 부울 맥락에서는 거짓이 거짓 으로 취급되고 다른 0이 아닌 값은 참 으로 취급됩니다. 문제는 strpos가 false 또는 0을 반환 할 수 있다는 것입니다. 0은 PHP의 잘못된 값이므로 비교할 때 프로그래머들 사이의 혼란이 발생합니다.
예를 들어 다음 코드는 오류가 발생할 수 있습니다.
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Found!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Not found!"</span></span><span>;
}
</span></span>
$ beless 의 $ haystack 에서 시작 위치가 0 이면 (즉, 문자열의 시작 부분에 있음) Strpos는 0을 반환하고 판단이 0 으로 취급 되면 실수로 하부 문자열이 발견되지 않았다고 믿습니다. 따라서 "발견되지 않았습니다!" .
이 문제를 피하기 위해 === 비교는 값뿐만 아니라 유형이기 때문에 엄격한 비교 연산자 ( === )를 사용해야합니다. 이 경우, 반환 값이 엄격하게 False 와 같은 경우에만 서브 스트링을 찾을 수 없습니다.
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Found!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Not found!"</span></span><span>;
}
</span></span>
이 접근법은 0이 거짓 으로 오인되는 상황을 피합니다. 코드는 $ 바늘이 나타나는 위치가 문자열의 시작 (즉, 인덱스가 0 ) 또는 중간인지 여부에 관계없이 올바르게 처리 할 수 있습니다.
Strpos가 False를 반환하게하는 몇 가지 상황이 있습니다.
서브 스트링은 존재하지 않습니다 . 가장 일반적인 경우는 대상 문자열 $ Haystack 에 Substring $ 바늘이 전혀 나타나지 않는다는 것입니다.
유효하지 않은 유형 입력 : 들어오는 매개 변수 유형이 잘못된 경우 strpos가 false를 반환 할 수 있습니다 (예 : $ haystack은 문자열이 아닙니다).
오프셋이 너무 큽니다 : 오프셋이 설정되어 있으면 나머지 문자열에서 $ 니들을 찾을 수 없게되면 strpos 도 false를 반환합니다.
오해에 갇히지 않기 위해 STRPO 사용을위한 모범 사례는 다음과 같습니다.
항상 엄격한 비교 ( === )를 사용하십시오 . 앞에서 언급했듯이, 느슨한 비교 연산자 ( == )는 0 과 false를 혼동하므로 사용하지 마십시오.
매개 변수 유형 확인 : $ haystack 과 $ 니들이 둘 다 문자열 유형인지 확인하십시오. 확실하지 않은 경우 is_string () 함수를 사용하여 확인할 수 있습니다.
오프셋 이해 : 오프셋을 사용하는 경우 오프셋의 영향을 명확히하고 너무 큰 값을 설정하지 않으므로 서브 스트링 검색이 실패 할 수 있습니다.
STRPO 함수의 반환 값은 0 또는 False 일 수 있으며, 두 사람은 PHP에서 부울 의미를 다릅니다. 0이 허위 로 취급되어 0이 발생하는 프로그램 오류를 피하기 위해서는 엄격한 유형 비교 ( ! == false )를 사용하여 기판이 발견되었는지 여부를 결정해야합니다. STRPO가 작동하는 방법과 반환 값을 올바르게 처리하는 방법을 이해하는 것이 잠재적 오류를 피하고 강력한 코드를 작성하는 데 중요합니다.