Birçok programlama dilleri kaynaşabilecek fonksiyonunu (NULL olmayan ilk değeri döndürür, example) var. PHP, ne yazık ki, yok.
Ne PHP birini uygulamak için iyi bir yol olurdu?
Birçok programlama dilleri kaynaşabilecek fonksiyonunu (NULL olmayan ilk değeri döndürür, example) var. PHP, ne yazık ki, yok.
Ne PHP birini uygulamak için iyi bir yol olurdu?
Eğer bu fonksiyon belirli türleri ile çalışmak istiyorum tam olarak nasıl tespit emin olun. PHP tip denetimi veya benzer işlevleri geniş bir çeşitlilik vardır, bu nedenle nasıl çalıştıklarını biliyorum emin olun. Bu is_null bir örnek karşılaştırma () ve boş ()
$testData = array(
'FALSE' => FALSE
,'0' => 0
,'"0"' => "0"
,'NULL' => NULL
,'array()'=> array()
,'new stdClass()' => new stdClass()
,'$undef' => $undef
);
foreach ( $testData as $key => $var )
{
echo "$key " . (( empty( $var ) ) ? 'is' : 'is not') . " empty<br>";
echo "$key " . (( is_null( $var ) ) ? 'is' : 'is not') . " null<br>";
echo '<hr>';
}
Gördüğünüz gibi, boş () tüm bunlar için true değerini döndürür, ancak is_null () sadece 2 tanesi yapar.
Nedeniyle uninitalised değişkenler ve dizi endeksleri PHP'nin tedavisi, kaynaşabilecek fonksiyonu her türlü kullanımı sınırlı olduğu dikkati çekiyor. Ben bunu yapmak mümkün olmak isterdim:
$id = coalesce($_GET['id'], $_SESSION['id'], null);
Ama bu irade, çoğu durumda, PHP E_NOTICE ile hata neden olur. Kullanmadan önce bir değişkenin varlığını test etmek için tek güvenli yolu boş () veya isset () doğrudan kullanmaktır. Eğer birleştiği tüm seçenekler başlatılmak bilinen biliyorsanız Kevin tarafından önerilen üçlü operatörü en iyi seçenektir.
I Ethan Kent tarafından yayınlanmıştır cevaba genişleyen ediyorum. Bu cevap nedeniyle coalesce
fonksiyonu genelde ne değildir array_filter işleyişinin, yanlış değerlendirmek null olmayan argümanlar atar. Örneğin:
echo 42 == coalesce(null, 0, 42) ? 'Oops' : 'Hooray';
Oops
Bunun üstesinden gelmek için, ikinci bir argüman ve fonksiyon tanımı gereklidir. callable function array_filter
olsun veya sonuç dizisine geçerli dizi değer katmak için söylüyorum sorumludur:
// "callable"
function not_null($i){
return !is_null($i); // strictly non-null, 'isset' possibly not as much
}
function coalesce(){
// pass callable to array_filter
return array_shift(array_filter(func_get_args(), 'not_null'));
}
Bu sadece array_filter
için 2. argüman olarak isset
veya 'isset'
geçebileceği eğer güzel olabilir, ama böyle bir şans olacaktır.
Şerefe