현재 위치: > 최신 기사 목록> strpos가 거짓을 반환하는 방법을 이해하는 방법은 무엇입니까? strpos 부울 값의 사용 함정에 대한 심층 분석

strpos가 거짓을 반환하는 방법을 이해하는 방법은 무엇입니까? strpos 부울 값의 사용 함정에 대한 심층 분석

M66 2025-07-26

PHP에서 strpos 함수는 다른 문자열에서 문자열이 먼저 나타나는 위치를 찾는 데 사용됩니다. 대상 문자열에 지정된 하위 문자가 발견되지 않으면 strpos는 false를 반환합니다. 그러나 False 는 PHP에서 "False value"로 간주되므로 반환 값을 다룰 때, 특히 반환 값이 0 (문자열의 시작 위치)과 혼동 될 때 일부 프로그래머간에 혼란을 야기 할 수 있습니다. 이 기사에서는 Strpos가 거짓을 반환하는 이유, 트랩 사용 및 이러한 상황을 효과적으로 처리하는 방법을 철저히 분석합니다.

1. 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가 반환됩니다.

2. strpos가 거짓을 반환 할 때 일반적인 오해

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 으로 취급 되면 실수로 하부 문자열이 발견되지 않았다고 믿습니다. 따라서 "발견되지 않았습니다!" .

3. strpos 의 반환 값을 올바르게 판단하는 방법

이 문제를 피하기 위해 === 비교는 값뿐만 아니라 유형이기 때문에 엄격한 비교 연산자 ( === )를 사용해야합니다. 이 경우, 반환 값이 엄격하게 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 ) 또는 중간인지 여부에 관계없이 올바르게 처리 할 수 있습니다.

4. Strpos가 거짓을 반환하는 상황

Strpos가 False를 반환하게하는 몇 가지 상황이 있습니다.

  • 서브 스트링은 존재하지 않습니다 . 가장 일반적인 경우는 대상 문자열 $ Haystack 에 Substring $ 바늘이 전혀 나타나지 않는다는 것입니다.

  • 유효하지 않은 유형 입력 : 들어오는 매개 변수 유형이 잘못된 경우 strpos가 false를 반환 할 수 있습니다 (예 : $ haystack은 문자열이 아닙니다).

  • 오프셋이 너무 큽니다 : 오프셋이 설정되어 있으면 나머지 문자열에서 $ 니들을 찾을 수 없게되면 strposfalse를 반환합니다.

5. STRPOS를 사용할 때 모범 사례

오해에 갇히지 않기 위해 STRPO 사용을위한 모범 사례는 다음과 같습니다.

  • 항상 엄격한 비교 ( === )를 사용하십시오 . 앞에서 언급했듯이, 느슨한 비교 연산자 ( == )는 0false를 혼동하므로 사용하지 마십시오.

  • 매개 변수 유형 확인 : $ haystack$ 니들이 둘 다 문자열 유형인지 확인하십시오. 확실하지 않은 경우 is_string () 함수를 사용하여 확인할 수 있습니다.

  • 오프셋 이해 : 오프셋을 사용하는 경우 오프셋의 영향을 명확히하고 너무 큰 값을 설정하지 않으므로 서브 스트링 검색이 실패 할 수 있습니다.

6. 요약

STRPO 함수의 반환 값은 0 또는 False 일 수 있으며, 두 사람은 PHP에서 부울 의미를 다릅니다. 0이 허위 로 취급되어 0이 발생하는 프로그램 오류를 피하기 위해서는 엄격한 유형 비교 ( ! == false )를 사용하여 기판이 발견되었는지 여부를 결정해야합니다. STRPO가 작동하는 방법과 반환 값을 올바르게 처리하는 방법을 이해하는 것이 잠재적 오류를 피하고 강력한 코드를 작성하는 데 중요합니다.