Saya punya pertanyaan tentang NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Mengapa saya melihat null ketika $a
string kosong? Apakah itu bug?
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.
$variable
. Yang Anda inginkan sebenarnya:$variable == null
(perhatikan==
)== null
cocok dengan string kosong dan bukan hanya nol atau tidak terdefinisi.$a = ''
adalah kosongstring
,false
adalah boolean,$a = 0;
adalah bilangan bulat dannull
dari tipenull
. 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 sepertigetName()
, Anda tidak boleh mendapatkannyanull
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
danis_null($foo)
memiliki fungsi yang sama$foo===null
. Tabel juga menunjukkan beberapa nilai rumit mengenainull
perbandingan. (ϕ menunjukkan variabel yang tidak diinisialisasi.)Saya tidak pernah menggunakan
empty()
danis_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))
sumber
==null
dan===null
.periksa
==
vs===
'' == NULL
akan kembali benar0 == NULL
akan kembali benarfalse == null
akan kembali benardimana sebagai
'' === NULL
akan kembali salah0 === NULL
akan kembali salahfalse === NULL
akan kembali salahsumber
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:
Di sana Anda dapat melihat bahwa string kosong
""
dibandingkan denganfalse
,0
,NULL
atau""
akan menghasilkan benar.Anda mungkin ingin menggunakan
is_null
[dokumen] sebagai gantinya, atau perbandingan ketat (tabel ketiga).sumber
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.Jika Anda ingin juga memeriksa apakah nilainya memiliki tipe yang sama, gunakan
===
saja. Untuk mempelajari perbedaan ini secara mendalam, silakan baca dokumentasi resmi .sumber
Jika Anda menggunakan
==
, php memperlakukan string atau array kosong sebagainull
. Untuk membuat perbedaan antaranull
danempty
, gunakan===
atauis_null
. Begitu:if($a === NULL)
atauif(is_null($a))
sumber
PHP 7 isset () vs kosong () vs is_null ()
sumber
Gunakan
empty
- http://php.net/manual/en/function.empty.php .Contoh:
sumber