Saya punya pertanyaan tentang NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Mengapa saya melihat null ketika $a
string kosong? Apakah itu bug?
Saya punya pertanyaan tentang NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Mengapa saya melihat null ketika $a
string 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.
== null
cocok dengan string kosong dan bukan hanya nol atau tidak terdefinisi.
$a = ''
adalah kosong string
, false
adalah boolean, $a = 0;
adalah bilangan bulat dan null
dari 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 null
saat kosong, tetapi lebih cenderung string emtpy $user->getName() === ''
atau $user->getId() === 0
atau $user->isActive === false
. Perilaku yang disengaja!
Seperti yang ditunjukkan pada tabel berikut, empty($foo)
sama dengan $foo==null
dan is_null($foo)
memiliki fungsi yang sama $foo===null
. Tabel juga menunjukkan beberapa nilai rumit mengenai null
perbandingan. (ϕ 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))
==null
dan ===null
.
periksa ==
vs===
'' == NULL
akan kembali benar
0 == NULL
akan kembali benar
false == null
akan kembali benar
dimana sebagai
'' === NULL
akan kembali salah
0 === NULL
akan kembali salah
false === NULL
akan 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
, NULL
atau ""
akan menghasilkan benar.
Anda mungkin ingin menggunakan is_null
[dokumen] sebagai gantinya, atau perbandingan ketat (tabel ketiga).
0
ketika 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==
)