Tôi có một câu hỏi liên quan đến NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Tại sao tôi thấy là null khi $amộ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 NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Tại sao tôi thấy là null khi $amộ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.
== nulllạ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, falselà một boolean, $a = 0;là một số nguyên và nulllà 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 nullkhi nó trống, nhưng nhiều khả năng là một chuỗi emtpy $user->getName() === ''hoặc $user->getId() === 0hoặc $user->isActive === false. Dự định hành vi!
Như được hiển thị trong bảng sau, empty($foo)tương đương $foo==nullvà 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 nullso 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))
==nullvà ===null.
kiểm tra ==so với===
'' == NULLsẽ trả lại đúng
0 == NULLsẽ trả lại đúng
false == nullsẽ trả lại đúng
trong khi
'' === NULLsẽ trả về false
0 === NULLsẽ trả về false
false === NULLsẽ 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, NULLhoặ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).
0khi đượ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 ý==)