ฉันมีคำถามเกี่ยวกับNULL
ใน PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
ทำไมฉันเห็นเป็นโมฆะเมื่อ$a
เป็นสตริงว่างเปล่า นั่นเป็นข้อบกพร่องหรือไม่?
ฉันมีคำถามเกี่ยวกับNULL
ใน PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
ทำไมฉันเห็นเป็นโมฆะเมื่อ$a
เป็นสตริงว่างเปล่า นั่นเป็นข้อบกพร่องหรือไม่?
คำตอบ:
สิ่งที่คุณกำลังมองหาคือ:
if($variable === NULL) {...}
===
หมายเหตุ
เมื่อใช้งาน==
ในขณะที่คุณทำ, PHP ถือว่าเป็นโมฆะ , เท็จ , 0ที่ว่างสตริงและที่ว่างเปล่าอาร์เรย์ที่เท่าเทียมกัน
== null
จับคู่สตริงว่างและไม่ใช่เพียง null หรือ undefined
$a = ''
เป็นที่ว่างเปล่าstring
, false
เป็นแบบบูล, $a = 0;
เป็นจำนวนเต็มและจากประเภทnull
null
สิ่งที่ OP บอกคือ PHP จะใช้เธรดเป็นค่า "เหมือนกัน" แต่ไม่ใช่ประเภท "เหมือนกัน" ดังนั้นการตรวจสอบอย่างเข้มงวด ===
จะตรวจสอบประเภทและล้มเหลวหากคุณใช้ที่แตกต่างกัน นั่นคือเหตุผลที่คุณควรสอดคล้องในค่าตอบแทนของคุณ หากคุณ normaly กลับสตริงในวิธีเหมือนgetName()
คุณไม่ควรจะได้รับnull
เมื่อมันว่างเปล่า แต่แนวโน้ม emtpy สตริง $user->getName() === ''
หรือหรือ$user->getId() === 0
$user->isActive === false
พฤติกรรมที่ตั้งใจ!
เป็นที่แสดงในตารางต่อไปนี้empty($foo)
จะเทียบเท่ากับ$foo==null
และมีฟังก์ชั่นเดียวกันของis_null($foo)
$foo===null
ตารางยังแสดงค่าที่ยุ่งยากบางประการเกี่ยวกับการnull
เปรียบเทียบ (ϕ หมายถึงตัวแปรที่ไม่มีการกำหนดค่าเริ่มต้น)
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
ฉันไม่เคยใช้empty()
และis_null()
ฟังก์ชั่น การใช้การเปรียบเทียบแบบง่าย ๆ นั้นมีความคลุมเครือน้อยกว่าเร็วกว่าและสะอาดกว่า โดยเฉพาะอย่างยิ่งจะมีวงเล็บปีกกาหยิกให้น้อยลง
เช่นif($x==null || $y==null)
vsif(is_null($x) || is_null($y))
==null
===null
ตรวจสอบ==
กับ===
'' == NULL
จะกลับมาจริง
0 == NULL
จะกลับมาจริง
false == null
จะกลับมาจริง
อยู่ที่ไหน
'' === NULL
จะกลับเท็จ
0 === NULL
จะกลับมาเท็จ
false === NULL
จะกลับเท็จ
ไม่มันไม่ใช่ข้อผิดพลาด ดูที่การเปรียบเทียบแบบหลวมกับตาราง== ( ตารางที่สอง) ซึ่งแสดงผลลัพธ์ของการเปรียบเทียบแต่ละค่าในคอลัมน์แรกกับค่าในคอลัมน์อื่น ๆ :
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
มีคุณสามารถเห็นได้ว่าเป็นสตริงว่าง""
เมื่อเทียบกับfalse
, 0
, NULL
หรือ""
จะให้ผลผลิตที่แท้จริง
คุณอาจต้องการใช้is_null
[เอกสาร]แทนหรือเปรียบเทียบอย่างเข้มงวด (ตารางที่สาม)
0
เมื่อหล่อสตริง: codepad.org/qi40SG3E (int)"php" == 0
ดังนั้น
ถ้าคุณใช้==
, PHP null
ถือว่าเป็นสตริงว่างหรืออาร์เรย์เป็น ที่จะทำให้ความแตกต่างระหว่างnull
และempty
อาจใช้หรือ===
is_null
ดังนั้น:
if($a === NULL)
หรือ if(is_null($a))
$variable
เท่านั้น สิ่งที่คุณต้องการคือ:$variable == null
(หมายเหตุ==
)