PHP boş işlevini Tespit

10 Cevap php

PHP (int) 0 değerlendirme alışkanlığı ve (dize) boş olarak "0" empty() fonksiyonunu kullanarak vardır. Eğer 0 sayısal ya da dize değerlerini düşünüyorsanız bu istenmeyen sonuçlar olabilir. Nasıl ben sadece vs boş nesneler, diziler, dizeleri, gerçek dönmek için "düzeltme" olabilir?

10 Cevap

Ben bu gibi kullanmak

if (empty($variable) && '0' != $variable) {
  // Do something
}

Ben nadiren tarif nedenle empty() kullanın. Bu boşluk ile meşru değerleri karıştırır. Belki SQL bir sürü iş yapmak çünkü bu, ama ben NULL bir değerin yokluğunu göstermek için kullanmayı tercih.

PHP, bir değişken veya ifade olduğu için sınayan bir işlev is_null() var NULL.

$foo = 0;
if (is_null($foo)) print "integer 0 is null!\n"; 
else print "integer 0 foo is not null!\n";

$foo = "0";
if (is_null($foo)) print "string '0' is null!\n"; 
else print "string '0' is not null!\n";

$foo = "";
if (is_null($foo)) print "string '' is null!\n"; 
else print "string '' is not null!\n";

$foo = false;
if (is_null($foo)) print "boolean false is null!\n"; 
else print "boolean false is not null!\n";

Ayrıca benzer bir testi yapmak için tam olarak eşittir operatörü === kullanabilirsiniz:

if ($foo === null) print "foo is null!\n";

Bu doğruysa $foo NULL, ama değil bu eğer false, sıfır, "", vb

"0" always considered false (veya boş) PHP, ve (ben burada iddia edeceksiniz değil) anlamda bir sürü yapmak yok. Sıfır de true olarak değerlendirmek sahip olmak istiyorsanız, kullanabileceğiniz strlen($value).

Bir görüş noktasıdır "Tespit". Başka o "kırık" değil varsaymak olabilir ve onunla kasten tasarlanmış şekilde çalışmak öğrenmek istiyorum.

Bunu açıklamak gibi sorunu göz önüne alındığında, en iyi şey, değişken, belirsiz bir tip haline koymak olamaz böylece kodunuzu kadar sıkın olacaktır. Aksi takdirde,) gettype (kullanarak veri türü için test etmek isteyeceksiniz.

Genellikle bir değer gerçekten boş ya da yanlış olduğunu belirlemek için üçlü eşittir operatörünü kullanmak istiyorum konuşma. Bu daha spesifik ve beklendiği gibi sonuçlar ALWAYS tam olarak dönmek.

Kod tek bir satır yapabileceğiniz bir şey yapmak için ayrı bir işlevi oluşturma ancak farklı bir operatörü kullanarak aşırı karmaşık görünüyor ve ek şaşırtmaca ekler.

Ayrıca, gerçekten sivil olduğunu (hangi türde olursa olsun) herhangi bir değer belirtmek için bir null değeri kullanmak için pek çok programcılar var olmayan bir değeri göstermek için 0 veya boş bir dize kullanmak eğiliminde ama daha doğru (ve ben daha iyi bir uygulama hissediyorum) -peyda oldu.

Ben her zaman benim kod temeli ekle

function is_blank($value) {
    return empty($value) && !is_numeric($value);
}

ve) (boş yerine kullanabilirsiniz. Bu non-boş olarak sıfır (int, float veya string) tutmanın sorunu çözer.

http://www.php.net/manual/en/function.empty.php#103756 hangi Mayıs 2011 eklendi bakın.

Burada NULL değerini okumak konusunda iyi bir docs vardır. bakmak

http://ar2.php.net/manual/en/types.comparisons.php

Değişken yanlış örneğin ise, bu sorun için en etkili çözüm test etmektir


if (!$variable_name) {echo $variable_name;}

Bir eğer koşullu koyduğunuzda değişken boş veya null olup olmadığı önemli değil, tüm sahte eşittir.

Bunu yönelik değil bir şey için empty() kullanmaya çalışıyoruz. Şahsen, davranış PHP eski bir programlama paradigması geliyor ve muhtemelen emekli olabileceğini düşünüyorum.

Bunun yerine, kontroller daha açık olun. Aksine değer kullanışlı değilse denetimi daha, o olup olmadığını kontrol edin. Örneğin, bir dizi istiyorsanız, o (is_array()) yerine bir dize olup olmadığını kontrol etmek yerine bir dizi var kontrol edin.

Ayrıca, tüm $_POST ve $_GET değişkenleri dizeleri olduğu gerçeği güvenebilirsiniz, bu yüzden size "" karşılaştırmalar yapabilir, ya da kontrol strlen() == 0.

Ben bir IsEmpty() veciz hızlı bir fonksiyon yarattık.

function IsEmpty($mData) {
    return is_int($mData) ? false : 
        is_string($mData) ? $mData=="" : 
        empty($mData);
}