NULLPHP ile ilgili bir sorum var :
$a = '';
if($a == NULL) {
echo 'is null';
}
Boş bir dize olduğunda neden null olduğunu görüyorum $a? Bu bir hata mı?
NULLPHP ile ilgili bir sorum var :
$a = '';
if($a == NULL) {
echo 'is null';
}
Boş bir dize olduğunda neden null olduğunu görüyorum $a? Bu bir hata mı?
Yanıtlar:
Aradığın şey:
if($variable === NULL) {...}
Not edin ===.
Kullandığınız ==gibi, PHP, NULL , false , 0 , boş dizeyi ve boş dizileri eşit kabul eder.
== nullşey buydu , neden sadece boş veya tanımsız değil boş dizeyle eşleştiğini merak ediyorlardı .
$a = ''boş string, falseboolean, $a = 0;tamsayı ve nulltürden null. OP'nin söylediği, PHP'nin bunları "aynı" değerde, ancak "aynı" türünde işlemeyeceğidir. Bu nedenle, sıkı bir === kontrol türü kontrol eder ve farklı olanları kullanırsanız başarısız olur. Dönüş değerlerinizde tutarlılık olmanızın nedeni budur. Bir dizeyi normalde gibi bir yöntemde döndürürseniz getName(), nullboş olduğunda almamalısınız , ancak büyük olasılıkla bir emtpy dizesi $user->getName() === '' veya $user->getId() === 0veya $user->isActive === false. Amaçlanan davranış!
Aşağıdaki tabloda gösterildiği gibi, empty($foo)ile eşdeğerdir $foo==nullve is_null($foo)aynı işleve sahiptir $foo===null. Tablo ayrıca nullkarşılaştırmayla ilgili bazı zor değerleri göstermektedir . (ϕ başlatılmamış değişkenleri gösterir.)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
Asla kullanmam empty()ve is_null()işlevler. Basit karşılaştırmayı kullanmak daha az belirsiz, daha hızlı ve daha temizdir. Özellikle daha az kıvrımlı parantez olacaktır.
örneğin if($x==null || $y==null)vsif(is_null($x) || is_null($y))
==nullve ===null.
kontrol ==vs===
'' == NULLtrue
0 == NULLdönecekti true
false == nulldönecekti true dönecekti
buna karşılık
'' === NULLyanlış
0 === NULLdöndürür yanlış
false === NULLdöndürür yanlış döndürür
Hayır, bu bir hata değil. Görebilirsiniz == ile gevşek karşılaştırmalar tablo diğer sütunlarda değerleri ile birinci sütunda her değer karşılaştırma sonucunu gösterir (ikinci tablo):
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Eğer boş bir dize o var görebilirsiniz ""ile karşılaştırıldığında false, 0, NULLveya ""gerçek verecektir.
Bunun yerine is_null [dokümanlar] veya katı bir karşılaştırma (üçüncü tablo) kullanmak isteyebilirsiniz .
0bir dize, bir dizeye yayınlandığında dönüştürülür : codepad.org/qi40SG3E . Yani (int)"php" == 0.
Bu değil bir hata ama PHP normal bir davranış. Çünkü olur ==PHP'de operatör türü için denetlemez.
'' == null == 0 == false
Değerlerin aynı türe sahip olup olmadığını da kontrol etmek istiyorsanız, ===bunun yerine kullanın. Bu farkı derinlemesine incelemek için lütfen resmi belgeleri okuyun .
Kullan empty- http://php.net/manual/en/function.empty.php .
Misal:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable. Ne istiyorsun aslında:$variable == null(not==)