isset () ve empty () - ne kullanılır


105

Kodlama stilimi geliştirmeme yardım eder misiniz? :) Bazı görevlerde kontrol etmem gereken - değişken boştur veya bir şey içerir. Bu görevi çözmek için genellikle aşağıdakileri yapıyorum.

Kontrol edin - bu değişken ayarlanmış mı değil mi? Eğer ayarlanmışsa - kontrol ederim - boş mu değil mi?

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

Ve bir sorum var - empty () öncesinde isset () kullanmalı mıyım - gerekli mi? TIA!


boş! isset ($ var) || $ var == false
zloctb

2
benim görüşüme göre empty () PHP'nin korkunç bir gelişmesidir. Herhangi bir biçimde "0" ı "boş" olarak kabul ettiğinden, çok fazla hata ayıklama süresine mal olan kötü tuzaklara düşebilirsiniz. Diyorum ki: ne pahasına olursa olsun kaçının ve mantığı kendiniz yazın
John

Yanıtlar:


143

Ne aradığınıza bağlıdır, eğer boş emptyolup olmadığını görmek istiyorsanız, sadece ayarlanıp ayarlanmadığını kontrol ederken, bir şeyin ayarlanıp ayarlanmadığını bilmek istiyorsanız kullanın isset.

Empty değişkenin ayarlanıp ayarlanmadığını kontrol eder ve eğer varsa boş, "", 0 vb. olup olmadığını kontrol eder.

Isset sadece ayarlanmış olup olmadığını kontrol eder, boş olmayan herhangi bir şey olabilir

İle emptyaşağıdaki şeyler boş kabul edilir:

  • "" (boş bir dize)
  • 0 (tam sayı olarak 0)
  • 0.0 (0 yüzdürme olarak)
  • "0" (dize olarak 0)
  • BOŞ
  • YANLIŞ
  • array () (boş bir dizi)
  • var $ var; (bir değişken bildirildi, ancak sınıfta bir değer yok)

Gönderen http://php.net/manual/en/function.empty.php


Yorumlarda belirtildiği gibi uyarı eksikliği de önemlidir boş ()

PHP Kılavuzu diyor

empty (), değişken ayarlanmadığında herhangi bir uyarı üretilmemesi dışında (boolean) var'ın tersidir .

İsset ile ilgili olarak

PHP Kılavuzu diyor

isset (), NULL olarak ayarlanmış bir değişkeni test ederse FALSE döndürür


Kodunuz şu şekilde iyi olacaktır:

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

Örneğin:

$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 
 {...}

Demek istediğim - yukarıdaki kodda kontrol ettiğimde değişken set mi yoksa iki kez mi? :)
Dmitry Belaventsev

Boş olup olmadığını kontrol edin, eğer durum böyle değilse php bir hata vermeyecektir.
Pez Cuckow

3
En büyük noktayı atlıyorsunuz empty: Test edilen değişken yokken bir uyarı vermiyor. Bu işlevin tüm amacı budur, aksi takdirde özdeştir == false.
deceze

1
Dolayısıyla, kılavuzdaki "değişken ayarlanmadığında hiçbir uyarı üretilmez" gerçeği kafamı karıştırdı. Uyarı olmaması, aşağıdaki kodda sorun yaşamayacağım anlamına gelmez. Şimdi benim için açık. Çok teşekkürler!
Dmitry Belaventsev

"isset sadece ayarlanmış olup olmadığını kontrol eder, yine de boş olabilir" Bu doğru değil: issetboş (ve var olan) bir değişken üzerinde olarak değerlendirilecektir false.
netcoder

12

Sizin özel durumda: if ($var).

Değişkenin var olupisset olmadığını bilmiyorsanız kullanmanız gerekir . Gerçi ilk satırda bunu deklare olduğundan, dolayısıyla sen, hayır, gerek yok, onun var biliyor olmamalıdır kullanmak .isset

Aynı şey empty, yalnızca bu, emptyaynı zamanda bir çek birleştiren doğruluğuna değerinin. emptyeşdeğerdir !isset($var) || !$varve !emptyeşdeğerdir isset($var) && $varya da isset($var) && $var == true.

Yalnızca bir değişken test etmek isterseniz bulunmalıdır için doğruluğuna , if ($var)mükemmel yeterli ve koymaktır.


Bu çok daha iyi açıklıyor. Bunun gibi diğer tüm durumlar için karşılaştırma yaparsak !empty is equivalent to isset($var) && $var, harika olurdu. Teşekkürler @deceze
Vir

6

Sadece empty () kullanabilirsiniz - dokümantasyonda görüldüğü gibi , değişkenin bir değeri yoksa yanlış döndürür.

Aynı sayfadaki bir örnek:

<?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';
}
?>

NULL olup olmadığını bilmek istiyorsanız isset'i kullanabilirsiniz. Aksi takdirde boş görünebilir () tek başına kullanmak için yeterlidir.


Olumsuz oylama için açıklama? Aynı olup olmadıklarını sormuyor, boş kontrol etmeden önce isset'i kontrol etmesi gerekip gerekmediğini soruyor.
chris

Ben downvote yoktu, ama doğru değil "kullanım isset bunu boş değil bilmek istiyorsanız": $var = null; isset( $var ) == true.
JJJ

PHP5 / 4 Kılavuzundan: isset () - "Bir değişkenin ayarlanıp ayarlanmadığını ve NULL olup olmadığını belirleyin." us.php.net/manual/en/function.isset.php
chris

2

İşte sonunda ortaya çıkarlar isset()ve empty()bildirilmemiş, boş, yanlış ve gerçek: 4 olasılıklar için.

$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) } 

Büyük / küçük harf haricinde tüm 'isset' sonuçlarının 'boş' sonuçların tersi olduğunu fark edeceksiniz $b=false. Yanlış olarak değerlendirilen tüm değerler (değer olmayan ancak değer olmayan null hariç), tarafından test edildiğinde doğru sonucunu döndürür.isset ve 'boş' ile test edildiğinde yanlış olarak .

isset()Bir değişkenin varlığından endişe duyduğunuzda kullanın . emptyDoğru veya yanlışı test ederken kullanın . Boşluk konularda, gerçek kullanım türü ise is_nullve ===0, ===false, ===''.


1

Değişken ayarlanmamışsa boş, true değerini döndürür. Ancak, var boş olmasa bile isset true değerini döndürür.


-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
   }
}

Bu basit bir örnek. Umarım yardımcı olur.

edit: issetbir değişken yukarıdaki gibi tanımlanmadığında eklenir , bir hataya neden olur, en azından ilk setinin yol boyunca bazı baş ağrısını gidermeye yardımcı olup olmadığını kontrol etmek.


7
strlen sıfırın altında mı? O dizeyi görmek istiyorum.
deceze

@deceze Sadece kaba bir örnek :) Tamam kullan = 0 değil <0
Akos
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.