Saya punya pertanyaan tentang NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Mengapa saya melihat null ketika $astring kosong? Apakah itu bug?
Saya punya pertanyaan tentang NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Mengapa saya melihat null ketika $astring kosong? Apakah itu bug?
Jawaban:
Apa yang Anda cari adalah:
if($variable === NULL) {...}
Perhatikan ===.
Saat digunakan ==, seperti yang Anda lakukan, PHP memperlakukan NULL , false , 0 , string kosong , dan array kosong sama.
== nullcocok dengan string kosong dan bukan hanya nol atau tidak terdefinisi.
$a = ''adalah kosong string, falseadalah boolean, $a = 0;adalah bilangan bulat dan nulldari tipe null. Apa yang dikatakan OP adalah bahwa PHP akan mengaitkannya dengan nilai "sama", tetapi bukan tipe "sama". Jadi pemeriksaan ketat === juga akan memeriksa jenis dan gagal jika Anda menggunakan yang berbeda. Itulah alasan Anda harus konsisten dalam nilai pengembalian Anda. Jika Anda biasanya mengembalikan string dalam metode seperti getName(), Anda tidak boleh mendapatkannya nullsaat kosong, tetapi lebih cenderung string emtpy $user->getName() === ''atau $user->getId() === 0atau $user->isActive === false. Perilaku yang disengaja!
Seperti yang ditunjukkan pada tabel berikut, empty($foo)sama dengan $foo==nulldan is_null($foo)memiliki fungsi yang sama $foo===null. Tabel juga menunjukkan beberapa nilai rumit mengenai nullperbandingan. (ϕ menunjukkan variabel yang tidak diinisialisasi.)
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
Saya tidak pernah menggunakan empty()dan is_null()fungsinya. Menggunakan perbandingan sederhana kurang ambigu, lebih cepat dan lebih bersih. Terutama akan ada kurung keriting yang kurang cocok.
misalnya if($x==null || $y==null)vsif(is_null($x) || is_null($y))
==nulldan ===null.
periksa ==vs===
'' == NULLakan kembali benar
0 == NULLakan kembali benar
false == nullakan kembali benar
dimana sebagai
'' === NULLakan kembali salah
0 === NULLakan kembali salah
false === NULLakan kembali salah
Tidak, itu bukan bug. Lihatlah perbandingan Loose dengan tabel == ( tabel kedua), yang menunjukkan hasil membandingkan setiap nilai di kolom pertama dengan nilai-nilai di kolom lain:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Di sana Anda dapat melihat bahwa string kosong ""dibandingkan dengan false, 0, NULLatau ""akan menghasilkan benar.
Anda mungkin ingin menggunakan is_null [dokumen] sebagai gantinya, atau perbandingan ketat (tabel ketiga).
0ketika dilemparkan ke string: codepad.org/qi40SG3E . Jadi (int)"php" == 0.
Ini bukan bug tetapi perilaku normal PHP. Itu terjadi karena ==operator di PHP tidak memeriksa jenis.
'' == null == 0 == false
Jika Anda ingin juga memeriksa apakah nilainya memiliki tipe yang sama, gunakan ===saja. Untuk mempelajari perbedaan ini secara mendalam, silakan baca dokumentasi resmi .
Gunakan empty- http://php.net/manual/en/function.empty.php .
Contoh:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable. Yang Anda inginkan sebenarnya:$variable == null(perhatikan==)