Neden kullanın! == FALSE php stripos kontrol etmek?

5 Cevap php

İşte ben bakıyorum kodudur.

foreach ($header as $idx => $field) {
    if (stripos($field, 'foo') !== false) {
        $cols['foo'] = $idx;
    } else if (stripos($field, 'bar') !== false) {
        $cols['bar'] = $idx;
    } else if (stripos($field, 'brr') !== false) {
        $cols['brr'] = $idx;
    } else if (stripos($field, 'ffo') !== false) {
        $cols['ffo'] = $idx;
    }
}

Sorry, don't know how to format the code prettily either, any tips on that would be appreciated.

I am looking at some code written by someone much smarter than I, so I am not inclined to trust my first impression to just change everything to if(stripos($foo)), but why do it this way?

5 Cevap

Cevap PHP bir "yanlış" değer, bir tam listesi için boş () fonksiyonu sayfasına bakın vb boş bir dizi, boş bir dize, bir NULL, tamsayı 0 gibi değerler, bir avuç memnun olabilir ki:

http://php.net/empty

Yani bu always hatalı sonuçlar doğuracak:

if(strpos("abc", "a")) { 
  echo "Yes";
} else {
  echo "No";
}

Yana "bir" "(0) ise" yanlış olduğu daha sonra PHP gördüğü ilk pozisyonda (indeks 0) oluşur.

Strpos sizin samanlıkta iğne bulmak DEĞIL zaman size tipini ve değerini hem denetler üç eşit operatörü ile kontrol etmek istediğimiz şeydir, FALSE döndürür. Karşılaştırma operatörleri üzerinde dokümanlar bakın

http://www.php.net/manual/en/language.operators.comparison.php

Çünkü pozisyon 0, 0 eşleştirilmezler dize yanlış değerlendirilirse, bu yüzden bu tür dikkate alınır böylece ekstra '=' eklemek için emin olun eğer.

strpos() returns false when NO eşleşme bulunamadı.

Çıkış comparison operators.

Böyle bir şey korumak daha kolay olurdu bilmiyorum. Eğer bu koşullar eğer başka bir şey yaparsam bağlıdır. Ama sizin işlevine argüman, ya da benzeri gibi geçmek, db, bir yapılandırma dosyasında tuşları ayarlayabilirsiniz.

$keys = array(
    'foo',
    'bar',
    'brr',
    'ffo',
);
foreach ($header as $idx => $field) {
    foreach ($keys as $key) {
    	if (stripos($field, $key) !== false) {
    		$cols[$key] = $idx;
    		break;
    	}
    }
}

PHP,! == Değil aynı tip ve değer anlamına gelir.

Stripos () yanlış (ve tam olarak 'yanlış', ve sıfır değil) başka bir şey dönerse, bu pozisyon 0 ve int (0) döndürülür bile, bir şey buldum demektir. == ama kimliğini === operatörü, yani stripos bilmek tek yolu kullanırken () kesin bir şey bulmuş değil standart bir karşılaştırma yaparken 0 ve yanlış eşit false 'nin değerini ve kullanarak yazın! == (özdeş değil, aynı tip ve strpos değerinin iki yani ()' karşılaştırmak s dönüş değeri.)

stripos başka içinde bir dizenin konumunu döndürür, ve dize bulunamadı değilse, yanlış döndürür, bu nedenle kimliğini comparison operators (kullanmanız önerilir ===,! == PHP "falsy" değer olarak 0 düşünüyor çünkü), bu örneği dikkate:

// Find the position of the 'a' character in the 'abc' string:
stripos('abc', 'a') !== false; // true, position is 0
stripos('abc', 'a') != false; // false, 0 is "falsy"