NULL
PHP 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ı?
NULL
PHP 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
, false
boolean, $a = 0;
tamsayı ve null
tü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()
, null
boş olduğunda almamalısınız , ancak büyük olasılıkla bir emtpy dizesi $user->getName() === ''
veya $user->getId() === 0
veya $user->isActive === false
. Amaçlanan davranış!
Aşağıdaki tabloda gösterildiği gibi, empty($foo)
ile eşdeğerdir $foo==null
ve is_null($foo)
aynı işleve sahiptir $foo===null
. Tablo ayrıca null
karşı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))
==null
ve ===null
.
kontrol ==
vs===
'' == NULL
true
0 == NULL
dönecekti true
false == null
dönecekti true dönecekti
buna karşılık
'' === NULL
yanlış
0 === NULL
döndürür yanlış
false === NULL
dö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
, NULL
veya ""
gerçek verecektir.
Bunun yerine is_null
[dokümanlar] veya katı bir karşılaştırma (üçüncü tablo) kullanmak isteyebilirsiniz .
0
bir 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==
)