Dalam php, apakah 0 diperlakukan sebagai kosong?

144

Kode akan menjelaskan lebih lanjut:

$var = 0;

if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}

Hasilnya mengembalikan "Ini kosong". Saya pikir kosong () akan memeriksa apakah saya sudah menetapkan variabel dan memiliki nilai di dalamnya. Mengapa mengembalikan "Kosong" ??

mysqllearner
sumber
15
@stereo emptymungkin adalah fungsi PHP yang paling berguna namun banyak disalahpahami. Pelajari bagaimana dan kapan menggunakannya.
tipuan
2
@stereo emptypada dasarnya adalah kependekan dari isset($var) && $var != false. Anda harus memegang emptysangat aneh untuk menembak diri sendiri dengan ini. ; P
deceze
@stereo 1) Di mana "tidak konsisten"? Ini bekerja seperti yang tertulis di kaleng. 2) Dengan longgar membandingkan suatu variabel falsetanpa memicu kesalahan "variabel tidak terdefinisi" tidak berguna? Oh well, tebak Anda tidak pernah melakukan ini ... 3) Memilih fungsi yang salah dalam konteks keamanan tidak berarti fungsi itu sendiri buruk, tidak berguna atau tidak konsisten; itu hanya berarti seseorang memilih fungsi yang salah untuk pekerjaan itu.
deceze
18
@menerima - Jika suatu fungsi sangat disalahpahami seperti empty(), maka itu mungkin memiliki nama yang salah.
martinstoeckli

Jawaban:

189

http://php.net/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)

Perhatikan bahwa daftar ini persis sama dengan paksaan untuk Boolean false. emptysederhana !isset($var) || !$var. Coba issetsaja.

tipuan
sumber
Jadi, saya harus memeriksa seperti ini: if (isset ($ var) && $ var! = 0) {Do Something} ??
mysqllearner
1
@ mysql Untuk kasus ini Anda mungkin juga menggunakan !empty($var), tetapi perhatikan bahwa itu tidak sama dengan apa yang Anda tulis dalam pertanyaan. Apa yang harus digunakan sepenuhnya tergantung pada nilai apa yang ingin Anda anggap sebagai true. Bandingkan saja perbedaan antara issetdan emptydan pilih kombinasi yang tepat untuk situasi yang tepat.
deceze
7
@mysqllearner: issetmengembalikan Trueif $var=0. Tetapi yang Anda maksud if(isset($var) && $var != 0)adalah sama denganempty
Felix Kling
@mysqllearner isset mendeteksi jika TIDAK kosong. untuk memeriksa apakah kosong, gunakan! isset sebagai gantinya.
1
@Deji Karena PHP memiliki akarnya sebagai bahasa web, dan nilai dalam permintaan HTTP selalu bersifat string, '0'diperlakukan sebagai setara dengan 0. Itu filosofi desain inti dari PHP. Saya setuju bahwa ini adalah pilihan yang sangat bisa diperdebatkan, namun, saya di sini bukan untuk memperdebatkan pilihan itu dengan Anda. Dalam logika PHP, emptysetara dengan == falsepemberitahuan minus adalah IMO baik-baik saja. Bahwa beberapa hal harus sangat berbeda dalam PHP daripada yang ada adalah topik yang berbeda.
tipuan
76

Saya bertanya-tanya mengapa tidak ada yang menyarankan tabel perbandingan Jenis yang sangat berguna . Ini menjawab setiap pertanyaan tentang fungsi umum dan membandingkan operator.

Cuplikan:

Expression      | empty($x)
----------------+--------
$x = "";        | true    
$x = null       | true    
var $x;         | true    
$x is undefined | true    
$x = array();   | true    
$x = false;     | true    
$x = true;      | false   
$x = 1;         | false   
$x = 42;        | false   
$x = 0;         | true    
$x = -1;        | false   
$x = "1";       | false   
$x = "0";       | true    
$x = "-1";      | false   
$x = "php";     | false   
$x = "true";    | false   
$x = "false";   | false   

Bersama lembar contekan lainnya, saya selalu menyimpan hardcopy dari meja ini di meja saya jika saya tidak yakin

Dan Sabun
sumber
2
Anda harus memperbarui lembar contekan Anda sekarang, saya akan memberi Anda lebih banyak ... 0.0 = benar, 0.00 = benar, "0.0" = false
Sayed Mohd Ali
34

Dalam hal nilai numerik Anda harus menggunakan fungsi is_numeric:

$var = 0;

if (is_numeric($var))
{
  echo "Its not empty";
} 
else 
{
    echo "Its empty";
}
Khandad Niazi
sumber
1
Solusi yang bagus ketika Anda perlu memeriksa '0' atau 0.
nicooo.
12

Gunakan strlen()sebagai gantinya. Saya berlari ke masalah yang sama menggunakan 1/0 sebagai nilai yang mungkin untuk beberapa variabel. Saya menggunakan if (strlen($_POST['myValue']) == 0)untuk menguji apakah ada karakter atau tidak dalam variabel saya.

Calin Rusu
sumber
cukup tambahkan @strlen untuk menghilangkan log kesalahan, untuk berjaga-jaga ... untuk tidak membuat log besar
Miguel
Mengapa kamu harus menaruh @strlen. Selama Anda melewati sebuah variabel, ia seharusnya tidak menghasilkan kesalahan. Jika strlen Anda kosong, ia akan mencatat nilai 0.
sketchthat
2
Jika variabel tidak disetel, saya yakin Anda akan mendapatkan kesalahan.
Evren Yurtesen
11

Saya baru-baru ini tertangkap dengan celana saya yang satu ini juga. Masalah yang sering kita hadapi adalah variabel yang tidak disetel - misalnya elemen bentuk yang mungkin atau mungkin tidak ada di sana, tetapi untuk banyak elemen, 0(atau string '0'yang akan melalui pos lebih akurat, tetapi masih akan dievaluasi sebagai "falsey" ) adalah nilai yang sah yang dikatakan pada daftar dropdown.

menggunakan empty()pertama dan kemudian strlen()adalah yang terbaik jika Anda membutuhkan ini juga, seperti:

if(!empty($var) && strlen($var)){
    echo '"$var" is present and has a non-falsey value!';
}
Oliver Williams
sumber
6

Dari sudut pandang linguistik kosong memiliki makna tanpa nilai . Seperti yang lain, Anda harus menggunakan isset()untuk memeriksa apakah suatu variabel telah ditentukan, yang merupakan apa yang Anda lakukan.

Elzo Valugi
sumber
1
Jawaban sederhana ini membantu saya menjernihkan masalah 0versus nulldengan mudah. Terima kasih!
Giacomo1968
4

empty()mengembalikan true untuk semua yang mengevaluasi FALSE, itu sebenarnya 'tidak' ( !) yang menyamar. Saya pikir Anda maksudisset()

soulmerge
sumber
4

Untuk menerima 0 sebagai nilai dalam penggunaan variabel isset

Periksa apakah variabel kosong

$var = 0;

if ($var == '') {
    echo "empty";
} else {
    echo "not empty"; 
}
//output is empty

Periksa apakah variabel diatur

$var = 0;

if (isset($var)) {
    echo "not empty";
} else {    
    echo "empty";
}
//output is not empty
bhu1st
sumber
4

Ini bekerja untuk saya!

//
if(isset($_POST['post_var'])&&$_POST['post_var']!==''){
echo $_POST['post_var'];
}

//results:
1 if $_POST['post_var']='1'
0 if $_POST['post_var']='0'
skip if $_POST['post_var']=''
Toan Nguyen Thai
sumber
1

Hal-hal berikut dianggap kosong:

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

Dari Manual PHP

Dalam kasus Anda $varadalah 0, sehingga empty($var)akan kembali true, Anda meniadakan hasil sebelum pengujian itu, sehingga blok lain akan menjalankan memberikan " Its empty" sebagai output.

codaddict
sumber
1

Dari manual: Mengembalikan FALSE jika var memiliki nilai yang tidak kosong dan tidak nol.

Hal-hal berikut dianggap kosong:

  • "" (string kosong)
  • 0 (0 sebagai bilangan bulat)
  • "0" (0 sebagai string) NULL
  • Array FALSE () (array kosong) var
  • $ var; (variabel dideklarasikan, tetapi tanpa nilai di kelas)

Lebih lanjut: http://php.net/manual/en/function.empty.php

Adam Kiss
sumber
1
if (empty($var) && $pieces[$var] != '0') {
//do something
}

Dalam kasus saya, kode ini berfungsi.

Cherrish
sumber
0

Sebenarnya isset hanya memeriksa apakah set variabel atau tidak. Dalam hal ini jika Anda ingin memeriksa apakah variabel Anda benar-benar nol atau kosong Anda dapat menggunakan contoh ini:

$myVar = '';
if (empty($myVar))
{
  echo "Its empty";
}
echo "<br/>";

if ($myVar===0)
{
  echo "also zero!";
}

hanya untuk pemberitahuan $ myVar == 0 bertindak seperti fungsi kosong.

arash
sumber
0

kosong berarti kosong .. apa pun kata tipu.

Kapan saya melakukannya

$var = '';    
$var = '0';

Saya berharap itu var_dump(empty($var));akan kembali salah.

jika Anda memeriksa hal-hal dalam array Anda harus selalu melakukannya isset($var)terlebih dahulu.

Paul Wolbers
sumber
0

gunakan saja ($_POST['input_field_name'])!=0alih-alih !($_POST['input_field_name'])==0maka 0 tidak diperlakukan sebagai kosong.

Manish Sharma
sumber
0

Tidak yakin apakah masih ada orang yang mencari penjelasan dan solusi. Komentar di atas mengatakan semuanya tentang perbedaan antara BENAR / SALAH / 1 / 0.
Saya hanya ingin membawa 2 sen saya untuk cara menampilkan nilai aktual.

BOOLEAN

Jika Anda bekerja dengan tipe data Boolean, Anda mencari hasil TRUE vs FALSE; jika Anda menyimpannya di MySQL, itu akan disimpan sebagai 1 resp. 0 (jika saya tidak salah, ini sama dengan memori server Anda).

Jadi untuk menampilkan nilai dalam PHP, Anda perlu memeriksa apakah itu benar (1) atau salah (0) dan menampilkan apa pun yang Anda inginkan: "TRUE" atau "FALSE" atau mungkin "1" atau "0".
Perhatian, semua yang lebih besar (atau berbeda) dari 0 juga akan dianggap sebagai TRUE di PHP. Misalnya: 2, "abc", dll. Semua akan mengembalikan BENAR.

BIT, TINYINT

Jika Anda bekerja dengan tipe data nomor, cara itu disimpan adalah sama.
Untuk menampilkan nilai, Anda harus memberi tahu PHP untuk menanganinya sebagai angka. Cara termudah yang saya temukan adalah mengalikannya dengan 1.

Alex Tanner
sumber
0

contoh yang tepat. buat saja bidang tipe int (contoh nomor ponsel) di dalam basis data dan kirimkan nilai kosong untuk basis data berikut melalui formulir atau cukup masukkan menggunakan SQL. apa yang akan disimpan dalam database 0 karena tipe int dan tidak dapat disimpan sebagai kosong atau nol. karena itu kosong tetapi akan disimpan sebagai 0. jadi ketika Anda mengambil data melalui PHP dan memeriksa nilai-nilai kosong. ini sangat berguna dan secara logis benar.

0,00, 0,000, 0,0000 .... 0,0 ... 0 juga kosong dan contoh di atas juga dapat digunakan untuk menyimpan berbagai jenis nilai dalam database seperti float, double, desimal (desimal memiliki varian berbeda seperti 0,000 dan seterusnya.

Sayed Mohd Ali
sumber
0

Anda perlu menggunakan isset () untuk memeriksa apakah nilainya diatur.

Veershetty
sumber
Hai @Veershetty, selamat datang di Stack Overflow. Terima kasih atas jawaban Anda, namun sepertinya tidak menambahkan sesuatu yang baru di atas jawaban yang ada dan lebih terperinci. Edit jawaban untuk menambahkan detail yang hilang dari jawaban lain atau pertimbangkan untuk menghapus jawaban Anda jika tidak ada yang baru.
Gricey