Tôi có một câu hỏi liên quan đến NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Tại sao tôi thấy là null khi $a
một chuỗi rỗng? Đó có phải là một lỗi không?
Tôi có một câu hỏi liên quan đến NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Tại sao tôi thấy là null khi $a
một chuỗi rỗng? Đó có phải là một lỗi không?
Câu trả lời:
Những gì bạn đang tìm kiếm là:
if($variable === NULL) {...}
Lưu ý ===
.
Khi sử dụng ==
, như bạn đã làm, PHP xử lý NULL , sai sự thật , 0 , các sản phẩm nào chuỗi, và trống mảng như bằng nhau.
== null
lại khớp chuỗi rỗng và không chỉ null hoặc không xác định.
$a = ''
là một rỗng string
, false
là một boolean, $a = 0;
là một số nguyên và null
là từ loại null
. Điều OP đang nói là PHP sẽ xâu chuỗi chúng theo giá trị "giống nhau", nhưng không phải là "giống nhau" về kiểu. Vì vậy, kiểm tra nghiêm ngặt ===
cũng sẽ kiểm tra loại và thất bại nếu bạn sử dụng các loại khác nhau. Đó là lý do bạn nên nhất quán trong các giá trị trả về của bạn. Nếu bạn bình thường trả về một chuỗi trong một phương thức như getName()
, bạn không nên nhận null
khi nó trống, nhưng nhiều khả năng là một chuỗi emtpy $user->getName() === ''
hoặc $user->getId() === 0
hoặc $user->isActive === false
. Dự định hành vi!
Như được hiển thị trong bảng sau, empty($foo)
tương đương $foo==null
và is_null($foo)
có cùng chức năng $foo===null
. Bảng này cũng cho thấy một số giá trị khó khăn liên quan đến việc null
so sánh. (biểu thị một biến chưa được khởi tạo.)
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
Tôi không bao giờ sử dụng empty()
và is_null()
chức năng. Sử dụng so sánh đơn giản là ít mơ hồ, nhanh hơn và sạch hơn. Đặc biệt sẽ có ít dấu ngoặc nhọn để phù hợp.
ví dụ if($x==null || $y==null)
vsif(is_null($x) || is_null($y))
==null
và ===null
.
kiểm tra ==
so với===
'' == NULL
sẽ trả lại đúng
0 == NULL
sẽ trả lại đúng
false == null
sẽ trả lại đúng
trong khi
'' === NULL
sẽ trả về false
0 === NULL
sẽ trả về false
false === NULL
sẽ trả về false
Không, đó không phải là lỗi. Hãy xem các so sánh lỏng lẻo với bảng == ( bảng thứ hai), cho thấy kết quả so sánh từng giá trị trong cột đầu tiên với các giá trị trong các cột khác:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Ở đó bạn có thể thấy rằng một chuỗi rỗng ""
so với false
, 0
, NULL
hoặc ""
sẽ mang lại thành sự thật.
Bạn có thể muốn sử dụng is_null
[tài liệu] thay thế hoặc so sánh nghiêm ngặt (bảng thứ ba).
0
khi được chuyển thành chuỗi: codepad.org/qi40SG3E . Vì vậy (int)"php" == 0
.
Đây không phải là một lỗi mà là hành vi bình thường của PHP. Nó xảy ra bởi vì ==
toán tử trong PHP không kiểm tra loại.
'' == null == 0 == false
Nếu bạn cũng muốn kiểm tra xem các giá trị có cùng loại hay không, hãy sử dụng ===
thay thế. Để nghiên cứu sâu về sự khác biệt này, xin vui lòng đọc tài liệu chính thức .
Sử dụng empty
- http://php.net/manual/en/feft.empty.php .
Thí dụ:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable
. Những gì bạn muốn thực sự là:$variable == null
(lưu ý==
)