2010-03-07 4 views
19
if(strpos("http://www.example.com","http://www.")==0){ // do work} 

나는 이것이 사실로 해결 될 것으로 기대합니다. 그러나 내가 지금까지 내가 strpos를 해결할 수 0PHP 5 strpos()는 0과 false를 반환하는 것과 차이가 있습니까?

이 올바른 사고/행동인가로 변환하는 false를 반환하기 때문에

if(strpos("abcdefghijklmnop","http://www.")==0){// do work} 

이 또한 PHP 5에 통과 할 경우 어떻게됩니까? 그렇다면 부분 문자열이 다른 문자열의 시작 부분에 있는지 테스트하기위한 해결 방법은 무엇입니까?

답변

39

예, 이것은 올바른/예상되는 동작입니다 :의 시작 부분에서 일치가있을 때

  • strpos0을 반환 할 수 있습니다 문자열
  • 일치하는 항목이없는 경우 false을 반환합니다.

0false을 비교하기 위해 ==을 사용하면 안됩니다. 이 같은 ===을 사용해야합니다

if(strpos("abcdefghijklmnop","http://www.") === 0) { 

} 

또는를 :

더 많은 정보를 들어
if(strpos("abcdefghijklmnop","http://www.") === false) { 

} 


Comparison Operators를 참조하십시오

  • $a == $b$b 같다 TRUE$a 경우 일 것이다.
  • $a === $b$a$b과 같고 이 같은 유형 인 경우 TRUE이됩니다. the manual page of strpos 인용

그리고 :

이 함수는 부울 FALSE을 반환하지만 FALSE로 평가 비 부울 값, 예컨대 0 또는 ""를 반환 할 수있다.
Booleans의 섹션을 읽고 에 대한 자세한 내용을 확인하십시오.
이 함수의 값 을 테스트하려면 the === operator을 사용하십시오.

9

===!== 유형 값을 비교 :

if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work} 
4

strpos는 int 또는 boolean false를 반환합니다. == 연산자는 또한 0을 평가하여 false를 의미하므로 === 연산자 (세 개의 등호)를 사용하여 비교되는 유형이 동일한 의미로 평가 될 수 있는지 확인하는 대신에 동일한 지 확인합니다.그것은 처음에 일치하는 항목을 발견하면

그렇게

if (strpos($hastack, $needle) === 0) 
{ 
    // the $needle is found at position 0 in the $haystack 
} 
1

0strpos에서 가능한 반환 값입니다. 일치하는 항목이 없으면 false (boolean)을 반환합니다. 따라서 값을 확인하는 ==을 사용하는 대신 값과 유형을 확인하는 === 연산자를 사용하여 strpos의 반환 값을 확인해야합니다.

0

나는 개인적으로 이런 식으로 사용하는 경향이 :

if(!strpos($v,'ttp:'))$v='http://'.$v; 

또는

if(strpos(' '.$v,'http')) 

항상 다음 " 0"위치를 피하기는 숫자 이상의 0 환호

+1

경우 수 있도록 당신의 코드는 비표준 표기법에서 비표준 방식을 사용하여 모든 유지 보수 가능성이 건물을 떠났던 표준 문제를 해결합니다. 괜찮은 PHP 개발자라면 누구나'==='표기법을 알고 기대할 수 있습니다. 답은 단지 쓸모없는 성능과 가독성을 제공합니다. –

관련 문제