isset () dan empty () - apa yang harus digunakan

105

Bisakah Anda membantu saya meningkatkan gaya pengkodean saya? :) Dalam beberapa tugas yang perlu saya periksa - apakah variabel kosong atau berisi sesuatu. Untuk mengatasi tugas ini, saya biasanya melakukan hal berikut.

Periksa - apakah variabel ini disetel atau tidak? Jika sudah disetel - saya periksa - kosong atau tidak?

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Dan saya punya pertanyaan - haruskah saya menggunakan isset () sebelum empty () - apakah itu perlu? TIA!

Dmitry Belaventsev
sumber
kosong adalah! isset ($ var) || $ var == false
zloctb
2
menurut pendapat saya empty () adalah perkembangan PHP yang mengerikan. Karena menganggap "0" dalam bentuk apa pun sebagai "kosong", Anda mungkin jatuh ke dalam perangkap buruk yang menghabiskan banyak waktu debugging. Saya akan mengatakan: hindari dengan cara apa pun dan tulis saja logikanya sendiri
Yohanes

Jawaban:

143

Itu tergantung apa yang Anda cari, jika Anda hanya ingin melihat apakah kosong, gunakan saja emptykarena ia memeriksa apakah sudah disetel juga, jika Anda ingin tahu apakah sesuatu sudah disetel atau tidak digunakan isset.

Empty memeriksa apakah variabel diset dan jika itu memeriksa untuk null, "", 0, dll

Isset cukup periksa apakah sudah disetel, bisa jadi apa saja yang bukan null

Dengan empty, hal-hal berikut dianggap kosong:

  • "" (string kosong)
  • 0 (0 sebagai bilangan bulat)
  • 0,0 (0 sebagai pelampung)
  • "0" (0 sebagai string)
  • BATAL
  • SALAH
  • array () (array kosong)
  • var $ var; (variabel dideklarasikan, tetapi tanpa nilai di kelas)

Dari http://php.net/manual/en/function.empty.php


Seperti yang disebutkan di komentar, kurangnya peringatan juga penting dengan empty ()

Kata Manual PHP

empty () adalah kebalikan dari (boolean) var, kecuali bahwa tidak ada peringatan yang dibuat saat variabel tidak disetel .

Mengenai isset

Kata Manual PHP

isset () akan mengembalikan FALSE jika menguji variabel yang telah disetel ke NULL


Kode Anda akan baik-baik saja seperti:

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Sebagai contoh:

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}
Pez Cuckow
sumber
Artinya - dalam kode di atas yang saya periksa adalah set variabel atau tidak dua kali? :)
Dmitry Belaventsev
Cukup periksa apakah kosong, php tidak akan membuat kesalahan jika tidak demikian.
Pez Cuckow
3
Anda menghilangkan poin terbesar dari empty: Ini tidak memunculkan peringatan ketika variabel yang diuji tidak ada. Itulah inti dari fungsi ini, jika tidak maka identik dengan == false.
menipu
1
Jadi, fakta di manual bahwa "tidak ada peringatan yang dihasilkan saat variabel tidak disetel" membuatku bingung. Tidak ada peringatan bukan berarti saya tidak akan mengalami masalah pada kode di bawah ini. Sekarang sudah jelas bagi saya. Terima kasih banyak!
Dmitry Belaventsev
"isset hanya memeriksa apakah sudah disetel, itu masih bisa menjadi null" Itu tidak benar: issetpada variabel null (dan yang ada) akan mengevaluasi ke false.
netcoder
12

Dalam kasus tertentu: if ($var).

Anda perlu menggunakan issetjika Anda tidak tahu apakah variabel tersebut ada atau tidak. Karena Anda menyatakannya pada baris pertama, Anda tahu itu ada, maka Anda tidak perlu, tidak, tidak boleh menggunakannya isset.

Hal yang sama berlaku untuk empty, hanya itu emptyjuga menggabungkan pemeriksaan untuk kebenaran nilainya. emptysetara dengan !isset($var) || !$vardan!empty setara dengan isset($var) && $var, atau isset($var) && $var == true.

Jika Anda hanya ingin menguji variabel yang seharusnya ada untuk kebenaran , if ($var)cukup sempurna dan to the point.

menipu
sumber
Yang ini menjelaskan jauh lebih baik. Jika kita mendapatkan perbandingan untuk semua kasus lain seperti ini !empty is equivalent to isset($var) && $var, itu akan luar biasa. Terima kasih @deceze
Vir
6

Anda bisa menggunakan empty () - seperti yang terlihat di dokumentasi , itu akan mengembalikan false jika variabel tidak memiliki nilai.

Contoh di halaman yang sama:

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

Anda dapat menggunakan isset jika Anda hanya ingin tahu apakah itu bukan NULL. Jika tidak, tampaknya kosong () baik-baik saja untuk digunakan sendiri.

chris
sumber
Penjelasan untuk suara bawah? Dia tidak bertanya apakah mereka sama, dia bertanya apakah dia perlu memeriksa isset sebelum memeriksa kosong.
chris
Aku tidak downvote, tetapi "penggunaan isset jika Anda ingin tahu itu tidak null" tidak benar: $var = null; isset( $var ) == true.
JJJ
Dari Manual PHP5 / 4: isset () - "Tentukan apakah variabel disetel dan bukan NULL." us.php.net/manual/en/function.isset.php
chris
2

Berikut adalah output dari isset()dan empty()untuk 4 kemungkinan: tidak dideklarasikan, null, false, dan true.

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

Anda akan melihat bahwa semua hasil 'isset' berlawanan dengan hasil 'kosong' kecuali untuk kasus $b=false. Semua nilai (kecuali null yang bukan nilai tetapi bukan nilai) yang dievaluasi ke false akan mengembalikan true saat diuji olehisset dan salah saat diuji dengan 'kosong'.

Jadi gunakan isset()saat Anda khawatir tentang keberadaan variabel. Dan gunakan emptysaat Anda menguji benar atau salah. Jika jenis sebenarnya dari hal-hal kekosongan, penggunaan is_nulldan ===0, ===false, ===''.

dnagirl.dll
sumber
1

Empty mengembalikan nilai true jika var tidak disetel. Tapi isset mengembalikan nilai true meskipun var tidak kosong.

Whiskas
sumber
-3
$var = 'abcdef';
if(isset($var))
{
   if (strlen($var) > 0);
   {
      //do something, string length greater than zero
   }
   else
   {
     //do something else, string length 0 or less
   }
}

Ini adalah contoh sederhana. Semoga membantu.

edit: ditambahkan issetjika variabel tidak didefinisikan seperti di atas, itu akan menyebabkan kesalahan, memeriksa untuk melihat apakah set pertama setidaknya akan membantu menghilangkan beberapa sakit kepala di jalan.

Akos
sumber
7
strlen di bawah nol? Saya ingin melihat tali itu.
menipu
@deceze Hanya contoh kasar :) OK gunakan = 0 bukan <0
Akos