Neden isset () ve! Empty () öğelerini kontrol etmelisiniz?


269

Arasında bir fark var mı issetve !empty. Bu çift boole kontrolünü yaparsam, bu şekilde mi yoksa gereksiz mi? ve aynı şeyi yapmanın daha kısa bir yolu var mı?

isset($vars[1]) AND !empty($vars[1])

3
Bunları farklı değişken türleri ile kullanmanın sonuçlarıyla ilgili güzel bir grafik var (farklılıkları var): virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php
Jeff Clayton

Açık tam tamamlayıcılar isset ve is_null, ancak! Boş birkaç farklı olanı kapsar. Her şey test ettiğiniz veri türüne bağlıdır.
Jeff Clayton

Yanıtlar:


420

Bu tamamen gereksizdir. emptyaşağı yukarı kısayoldur !isset($foo) || !$foove buna !emptybenzerdir isset($foo) && $foo. Yani emptytersi bir şey issetartı bir değerin doğruluğu için ek bir kontrol yapar .

Başka bir deyişle, emptyaynıdır !$foo, ancak değişken yoksa uyarı atmaz. Bu işlevin ana noktası budur: ayarlanan değişken hakkında endişelenmeden bir boole karşılaştırması yapın.

Kılavuz şu şekilde koyar:

empty()tersidir (boolean) var, değişken ayarlanmamış olduğunda uyarı oluşturulur dışında.

!empty($vars[1])Burada kullanabilirsiniz .


7
Ama sonra yoksa, $vars[1]bir bildirim alır.
karim79

6
Bu fikri nereden aldığım hakkında hiçbir fikrim yok. Artı biri.
karim79

8
@karim IMO empty, PHP'deki en yanlış anlaşılan işlevlerden biridir. "Uyarı oluşturulmaz" konusundaki küçük pasajı göz ardı etmek çok kolaydır. Belgeleri buraya göndermek için birkaç kez taramak zorunda kaldım.
deceze

2
empty($vars[1])$vars[1]ayarlanmamış bile uyarılara neden olmaz, ancak echo $vars[1]olacaktır. Kullanarak gerçeği kontrol ettim echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Amil Waduwawara

4
@Shahor Birçok dil 0olarak kabul edilir false. PHP tek değil. Hala şikayetinizin ne olduğundan emin değilim.
deceze

33

isset() bir değişkenin boş olup olmadığını test eder:

http://us.php.net/manual/en/function.isset.php

empty() değişken belirli değerlere ayarlandığında true değerini döndürebilir:

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

Bunu göstermek için, $ the_var atanmamış, 0 ve 1 olarak aşağıdaki kodu deneyin.

<?php

#$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>

12

Kabul edilen cevap doğru değil.

isset () ,! empty () ile eşdeğer DEĞİLDİR .

Bu rotadan aşağı inerseniz bazı hoş olmayan ve hata ayıklaması zor hatalar oluşturacaksınız. örneğin bu kodu çalıştırmayı deneyin:

<?php

$s = '';

print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";

?>

https://3v4l.org/J4nBb


7
Kabul edilen cevap hiçbir şekilde buna isseteşdeğer değildir !empty.
deceze

8
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
    echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
    echo '$a is not empty';
} else {
    echo '$a is empty';
}

1
Fakat değişken ayarlanmamış bir büyük / küçük harf ele almadınız.
Amil Waduwawara

3

Boş sadece kontrol başvurulan değişken / dizi bir php doc (boş) kontrol ederseniz bu şeylerin emtpy olarak kabul görür

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)

isset php doc'de (isset) de bulunabilen değişken isset olup olmadığını kontrol edin.


2

Bu gerekli değil.

Değişken yoksa uyarı üretilmez. Bunun anlamı empty () aslında! İsset ($ var) || $ var == yanlış.

php.net


2
Herhangi bir PHP sürümünde bu hiçbir zaman gerekli olmamıştır, çünkü boş zaten (değil) kümesini kontrol eder. Boşun artık soru ile ifadeleri desteklediği gerçeğini karıştırıyorsunuz.
alxgb

Bu sadece beş yıl sonra doğrudur.
Lennon

2

isset($vars[1]) AND !empty($vars[1])eşittir !empty($vars[1]).

Ampirik olarak göstermek için basit bir kod hazırladım.

Son satır tanımsız değişkendir.

+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| ''        | true    | true    | false    | false               |
| ' '       | false   | true    | true     | true                |
| false     | true    | true    | false    | false               |
| true      | false   | true    | true     | true                |
| array ()  | true    | true    | false    | false               |
| NULL      | true    | false   | false    | false               |
| '0'       | true    | true    | false    | false               |
| 0         | true    | true    | false    | false               |
| 0.0       | true    | true    | false    | false               |
| undefined | true    | false   | false    | false               |
+-----------+---------+---------+----------+---------------------+

Ve kod

$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;

function compare($var)
{
    print(var_export($var, true) . "|" .
        var_export(empty($var), true) . "|" .
        var_export(isset($var), true) . "|" .
        var_export(!empty($var), true) . "|" .
        var_export(isset($var) && !empty($var), true) . "\n");
}

for ($i = 1; $i <= 9; $i++) {
    $var = 'var' . $i;
    compare($$var);
}

@print(var_export($var10, true) . "|" .
    var_export(empty($var10), true) . "|" .
    var_export(isset($var10), true) . "|" .
    var_export(!empty($var10), true) . "|" .
    var_export(isset($var10) && !empty($var10), true) . "\n");

Tanımsız değişken işlev dışında değerlendirilmelidir, çünkü işlevin kendisi kapsamın kendisinde geçici değişken oluşturur.


0

"Boş": sadece değişkenler üzerinde çalışır. Boş, farklı değişken türleri için farklı anlamlara gelebilir (el kitabına bakın: http://php.net/manual/en/function.empty.php ).

"isset": değişkenin var olup olmadığını kontrol eder ve gerçek bir NULL veya false değeri kontrol eder. "Unset" çağırılarak ayarlanabilir. Bir kez daha, kılavuzu kontrol edin.

İkisinden birinin kullanımı, kullandığınız değişken türüne bağlıdır.

Her ikisini de kontrol etmek daha güvenlidir, çünkü öncelikle değişkenin var olup olmadığını ve gerçekten NULL veya boş olmadığını kontrol ediyorsunuz.


3
@szahn "ikisini de kontrol etmek daha güvenli", - programcı olarak güvenlik için istediğiniz her şeyi kontrol edebilirsiniz. Ancak kodunuz yedekli ise, programcı olarak yedekli olabilirsiniz.
madlopt

0

aşağıdaki gibi gönder düğmesi ile eklemek / düzenlemek için aynı sayfayı kullanırsak

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">

o zaman kullanmamalıyız

isset($_POST['edit_id'])

bcoz edit_id, sayfa ekle veya düzenle olsun her zaman ayarlanır, bunun yerine aşağıdaki kontrolü kullanmalıyız

!empty($_POST['edit_id'])

önceki yazı gönderildi bcoz i enter enter yanlışlıkla, işte tam cevabım ... neden downvote? :(
diEcho

0
  • PHP Web sitesinden empty()işleve başvurarak :

İade FALSEdurumunda varboş olmayan ve sıfır olmayan bir değeri vardır.

Bunu bilmek iyi bir şey. Bir başka deyişle, her şeyi de NULL, hiç 0“ile” dönecektir TRUEkullanırken empty()işlevi.

  • İşte isset()işlevin döndürdüğünün açıklaması :

TRUEVarsa döndürür var; FALSEaksi takdirde.

Başka bir deyişle, sadece mevcut olmayan değişkenler (veya kesinlikle sahip değişkenler olarak NULLdeğerler) dönecektir FALSEüzerine isset()fonksiyonu. Herhangi bir değer türüne sahip olan tüm değişkenler ( 0boş metin dizesi vb TRUE.) Geri döner .

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.