php 5 strpos () 0 ve yanlış dönen arasındaki fark?

5 Cevap php
if(strpos("http://www.example.com","http://www.")==0){ // do work}

Bu öyle ki, gerçek olarak çözmek için beklersiniz. Yapmam Ama ne olur

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

Kadarıyla strpos çalışmak gibi 0 olarak çevirir false döndürür, çünkü bu aynı zamanda PHP 5 üzerinde geçer.

Bu doğru düşünme / davranış mı? Yani bir alt dize Başka bir dizenin başında olduğu için test için geçici çözüm ne ise?

5 Cevap

Evet, bu doğru / beklenen davranıştır:

  • Dizenin başında bir eşleşme olduğunda strpos 0 dönebilirsiniz
  • Hiçbir maç olduğunda ve false dönecektir

Şey == 0 ve false karşılaştırmak için kullanmak gerektiğidir; Bu gibi === kullanmanız gerekir:

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

}

Veya:

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

}


For more informations, see Comparison Operators :

  • $a $b eşitse $a == $b TRUE olacaktır.
  • $a $b eşitse $a === $b TRUE olacak ve they are of the same type.

Ve, alıntı the manual page of strpos :

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "".
Please read the section on
Booleans for more information.
Use the === operator for testing the return value of this function.

=== ve !== tipini and değeri karşılaştırabilirsiniz:

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

strpos bir int veya boolean false döndürür. == operatörü, aynı zamanda da karşılaştırılan türleri bunun yerine aynı anlama değerlendirilebilir eğer sadece görme aynı olduğunu kontrol === operatörünü (üç eşittir işareti) kullanmak istiyorsanız, 0 yanlış demek değerlendirir.

bu yüzden

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

Bu çok başında bir eşleşme bulduğunda 0 strpos olası bir dönüş değeridir. Maç bulunmazsa durumda false (boolean) döndürür. Yani strpos yerine sadece değerini denetler == kullanarak daha değerini ve türünü kontrol === operatörünü kullanarak dönüş değerini kontrol etmeniz gerekir.

Ben şahsen bu şekilde kullanmak eğilimindedir:

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

veya

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

to avoid the "0" position then always make it a number mveyae than 0 cheers