Di mana saya harus menggunakan isset () dan! Empty ()

106

Saya membaca bahwa isset()fungsi tersebut memperlakukan string kosong sebagai TRUE, oleh karena isset()itu bukan cara yang efektif untuk memvalidasi input teks dan kotak teks dari bentuk HTML.

Jadi, Anda dapat menggunakan empty()untuk memeriksa bahwa pengguna mengetik sesuatu.

  1. Apakah benar bahwa isset()fungsi tersebut memperlakukan string kosong sebagai TRUE?

  2. Lalu dalam situasi apa yang harus saya gunakan isset()? Haruskah saya selalu menggunakan !empty()untuk memeriksa apakah ada sesuatu?

Misalnya, bukan

if(isset($_GET['gender']))...

Menggunakan ini

if(!empty($_GET['gender']))...
tulang kering
sumber
kemungkinan duplikat Why check both isset () and! empty ()
Gajus

Jawaban:

136

isset vs.! kosong

FTA:

"isset () memeriksa apakah sebuah variabel memiliki nilai termasuk (False, 0 atau string kosong), tetapi bukan NULL. Mengembalikan TRUE jika var ada; FALSE sebaliknya.

Di sisi lain fungsi empty () memeriksa apakah variabel memiliki nilai kosong string kosong, 0, NULL atau False. Menampilkan FALSE jika var memiliki nilai yang tidak kosong dan bukan nol. "

dassouki
sumber
47
FTA: Dari Artikel
Jianxin Gao
5
empty()juga mengembalikan nilai true untuk array kosong.
Mitya
Meskipun empty()mengembalikan TRUE untuk 0, sebaiknya gunakan operator ini untuk matematika jika "0" adalah string secara tidak sengaja. Ini bisa berbahaya. Sebagai gantinya, gunakan operator dasar >, <dan ==dan konversikan variabel menggunakan intval()atau floatval().
kaleazy
33

Secara umum:

  • issetmenguji apakah sebuah variabel (atau elemen dari sebuah array, atau properti dari sebuah objek) ada (dan bukan null)
  • empty menguji jika variabel (...) berisi beberapa data yang tidak kosong.


Untuk menjawab pertanyaan 1 :

$str = '';
var_dump(isset($str));

memberi

boolean true

Karena variabel itu $strada.


Dan pertanyaan 2 :

Anda harus menggunakan isset untuk menentukan apakah suatu variabel ada ; misalnya, jika Anda mendapatkan beberapa data sebagai larik, Anda mungkin perlu memeriksa apakah ada kunci dalam larik itu.
Pikirkan tentang $_GET/ $_POST, misalnya.

Sekarang, untuk mengerjakan nilainya, ketika Anda tahu ada nilai seperti itu: itulah pekerjaan empty.

Pascal MARTIN
sumber
11

Tidak ada cara yang baik untuk memeriksa masukan yang valid.

  • isset() tidak cukup karena - seperti yang telah dicatat - menganggap string kosong sebagai nilai yang valid.
  • ! empty() juga tidak cukup karena menolak '0', yang mungkin merupakan nilai yang valid.

Menggunakan isset()gabungan dengan pemeriksaan kesetaraan terhadap string kosong adalah kebutuhan minimum yang Anda perlukan untuk memverifikasi bahwa parameter yang masuk memiliki nilai tanpa membuat negatif palsu:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

Tapi dengan "minimal", maksud saya persis seperti itu. Semua kode di atas tidak menentukan apakah ada nilai untuk $_GET['gender']. Itu tidak menentukan apakah nilai untuk $_GET['gender']adalah valid (misalnya, salah satu("Male", "Female","FileNotFound") ).

Untuk itu lihat jawaban Josh Davis .

Komunitas
sumber
Karena Anda menggunakan perbandingan longgar, cuplikan yang Anda sarankan akan memberikan positif palsu saat menangani nilai non-string nol-ish / falsey. 3v4l.org/aIWqA
mickmackusa
11

issetdimaksudkan untuk digunakan hanya untuk variabel dan bukan hanya nilai, sehingga isset("foobar")akan menimbulkan kesalahan. Mulai dari PHP 5.5, emptymendukung variabel dan ekspresi.

Jadi pertanyaan pertama Anda seharusnya adalah jika issetmengembalikan nilai true untuk variabel yang memiliki string kosong. Dan jawabannya adalah:

$var = "";
var_dump(isset($var));

The tabel perbandingan jenis dalam manual PHP ini cukup berguna untuk pertanyaan seperti itu.

issetpada dasarnya memeriksa apakah suatu variabel memiliki nilai selain null karena variabel yang tidak ada selalu memiliki nilai null . emptyadalah jenis counter part issettetapi juga memperlakukan nilai integer 0dan nilai string "0"sebagai kosong. (Sekali lagi, lihat tabel perbandingan tipe .)

Gumbo
sumber
1
Perhatikan bahwa empty()juga "mendukung ekspresi, bukan hanya variabel" mulai dari PHP 5.5.0.
ComFreek
8

Jika Anda memiliki $ _POST ['param'] dan menganggap itu jenis string

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

identik dengan

!empty($_POST['param'])
macio.Jun
sumber
4

isset () bukanlah cara yang efektif untuk memvalidasi input teks dan kotak teks dari bentuk HTML

Anda dapat menulis ulang bahwa "isset () bukanlah cara untuk memvalidasi input." Untuk memvalidasi masukan, gunakan ekstensi filter PHP . filter_has_var()akan memberi tahu Anda apakah variabel tersebut ada sementarafilter_input() akan memfilter dan / atau membersihkan masukan.

Perhatikan bahwa Anda tidak harus menggunakan filter_has_var()before filter_input()dan jika Anda meminta variabel yang tidak disetel, filter_input()hanya akan kembali null.

Josh Davis
sumber
3

Kapan dan bagaimana menggunakan:

  1. isset ()

Benar untuk 0, 1, string kosong, string berisi nilai, benar, salah

False untuk null

misalnya

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. Kosong

False untuk 1, string yang berisi nilai, true

Benar untuk nol, string kosong, 0, salah misalnya

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
Fokwa Terbaik
sumber
2

isset digunakan untuk menentukan apakah ada instance dari sesuatu, jika variabel telah dibuat ... itu tidak berkaitan dengan nilai parameter ...

Pascal MARTIN ... +1 ...

kosong () tidak menghasilkan peringatan jika variabel tidak ada ... oleh karena itu, isset () lebih disukai saat menguji keberadaan variabel ketika Anda bermaksud untuk mengubahnya ...

Mike
sumber
1

Menggunakan emptysudah cukup:

if(!empty($variable)){
    // Do stuff
}

Selain itu, jika Anda menginginkan nilai integer, mungkin juga perlu memeriksanya intval($variable) !== FALSE.

Kamu
sumber
2
Selain itu, intval () tidak pernah mengembalikan FALSE.
Josh Davis
1
itu TIDAK cukup karena '0' adalah string yang valid tetapi tidak untuk empty... isset/ filter_has_varharus digunakan untuk memeriksa apakah var ada.
Yousha Aleayoub
1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
melenguh
sumber
1

Saya datang ke sini mencari cara cepat untuk memeriksa apakah suatu variabel memiliki konten di dalamnya. Tidak ada jawaban di sini yang memberikan solusi lengkap, jadi ini dia:


Cukup untuk memeriksa apakah masukannya ''atau null, karena:

Minta .../test.php?var=hasil URL dalam$_GET['var'] = ''

Minta .../test.phphasil URL dalam$_GET['var'] = null


isset()mengembalikan falsehanya jika variabel ada dan tidak disetel ke null, jadi jika Anda menggunakannya, Anda akan mendapatkan truestring kosong ( '').

empty()menganggap keduanya nulldan ''kosong, tetapi juga menganggap '0'kosong, yang merupakan masalah dalam beberapa kasus penggunaan.

Jika Anda ingin memperlakukannya '0'sebagai kosong, gunakan empty(). Jika tidak, gunakan cek berikut:

$var .'' !== ''mengevaluasi falsehanya untuk input berikut:

  • ''
  • null
  • false

Saya menggunakan pemeriksaan berikut untuk juga menyaring string dengan hanya spasi dan jeda baris:

function hasContent($var){
    return trim($var .'') !== '';
}
kentang
sumber
0

Saya menggunakan yang berikut ini untuk menghindari pemberitahuan, ini memeriksa apakah var itu dideklarasikan pada GET atau POST dan dengan awalan @ Anda dapat dengan aman memeriksa apakah tidak kosong dan menghindari pemberitahuan jika var tidak disetel:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}
Aztrozero
sumber
"Operator stfu" ( @) tidak boleh didorong dan tidak perlu untuk cuplikan Anda. Ini bukan jawaban yang bagus. Anda melakukan perbandingan longgar. Anda mungkin juga menggunakan !empty().
mickmackusa
1
Ooo man ... Ini bagus untuk contoh pengkodean yang buruk. @akan memberi Anda masalah dengan debugging, dampak halaman lebih lambat dan Anda masih dapat memiliki error_loglebih dari 1GB dalam satu saat. Jadilah pintar dan gunakan !empty(), !is_null()atau sesuatu seperti itu.
Ivijan Stefan Stipić
0

isset () digunakan untuk memeriksa apakah variabel disetel dengan nilai atau tidak dan Empty () digunakan untuk memeriksa apakah variabel yang diberikan kosong atau tidak.

isset () mengembalikan nilai true ketika variabel tidak null sedangkan Empty () mengembalikan true jika variabel adalah string kosong.

Shreya thakuri
sumber
0
    $var = '';
// 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';
    }

Sumber: Php.net

csandreas1
sumber
0

isset () vs empty () vs is_null ()

masukkan deskripsi gambar di sini

Foued MOUSSI
sumber
0

! kosong akan berhasil. jika Anda hanya perlu memeriksa data ada atau tidak maka gunakan isset other empty dapat menangani validasi lain

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

iNandi
sumber