İsset () ve! Empty () nerede kullanmalıyım


106

Bir yerde okudum, isset()işlev boş bir dizeyi TRUEbu nedenleisset() bir HTML formundaki metin girişlerini ve metin kutularını doğrulamanın etkili bir yolu değil.

Böylece empty(), bir kullanıcının bir şey yazdığını kontrol etmek için kullanabilirsiniz .

  1. isset()İşlevin boş bir dizgeyi olarak değerlendirdiği doğru TRUEmu?

  2. O halde hangi durumlarda kullanmalıyım isset()? Bir !empty()şey olup olmadığını kontrol etmek için her zaman kullanmalı mıyım ?

Örneğin yerine

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

Bunu kullanarak

if(!empty($_GET['gender']))...

Yanıtlar:


136

isset ve! boş

FTA:

"isset (), bir değişkenin (False, 0 veya boş dize) dahil ancak NULL olmayan bir değere sahip olup olmadığını kontrol eder. Var varsa TRUE; aksi takdirde FALSE döndürür.

Öte yandan empty () işlevi, değişkenin boş bir dizge, 0, NULL veya False değerine sahip olup olmadığını kontrol eder. Değişken boş olmayan ve sıfır olmayan bir değere sahipse YANLIŞ döndürür. "


47
FTA:
Makaleden

5
empty()boş bir dizi için de true değerini döndürür.
Mitya

Tho empty(), 0 için DOĞRU döndürse bile , "0" ın yanlışlıkla bir dizge olması durumunda bu operatörü matematik için kullanmak iyi bir fikir değildir. Bu tehlikeli olabilir. Bunun yerine, temel kullanın >, <ve ==operatörler ve dönüştürme değişkenleri kullanarak intval()veya floatval().
kaleazy

33

En genel şekilde:

  • issetbir değişkenin (veya bir dizinin bir öğesinin veya bir nesnenin bir özelliğinin) var olup olmadığını (ve boş olmadığını) test eder
  • empty bir değişkenin (...) bazı boş olmayan veriler içerip içermediğini test eder.


1. soruyu cevaplamak için :

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

verir

boolean true

Çünkü değişken $str var.


Ve soru 2 :

Bir değişkenin var olup olmadığını belirlemek için isset kullanmalısınız ; örneğin, dizi olarak bazı veriler alıyorsanız, bu dizide bir anahtarın ayarlanmış olup olmadığını kontrol etmeniz gerekebilir.
Düşün $_GET/$_POSTÖrneğin .

Şimdi, değeri üzerinde çalışmak, böyle bir değer olduğunu bildiğiniz zaman: işiniz budur empty.


11

Geçerli girdiyi kontrol etmenin iyi bir yolu da değildir.

  • isset() Bu yeterli değildir çünkü - daha önce de belirtildiği gibi - boş bir dizeyi geçerli bir değer olarak kabul eder.
  • ! empty() ya da geçerli bir değer olabilecek '0'ı reddettiği için yeterli değildir.

isset()Boş bir dizgeye karşı eşitlik denetimi ile birlikte kullanmak , gelen bir parametrenin yanlış negatifler oluşturmadan bir değere sahip olduğunu doğrulamak için ihtiyaç duyduğunuz minimum değerdir:

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

Ama "minimum" derken, tam olarak bunu kastediyorum. Yukarıdaki kodun yaptığı tek şey, için bir değer olup olmadığını belirlemektir $_GET['gender']. O mu değil değeri olmadığını belirlemek $_GET['gender']olduğunu geçerlidir (örneğin birini ).("Male", "Female","FileNotFound")

Bunun için Josh Davis'in cevabına bakın .


Gevşek bir karşılaştırma kullandığınız için, önerilen kod parçacığınız sıfıra yakın / yanlış dize olmayan bir değeri işlerken yanlış pozitifler verecektir. 3v4l.org/aIWqA
mickmackusa

11

issetyalnızca değerler için değil, yalnızca değişkenler için kullanılması amaçlanmıştır, bu nedenle isset("foobar")bir hata oluşturur. PHP 5.5'ten itibaren,empty hem değişkenleri hem de ifadeleri destekler.

İlk soru oldukça eğer olmalıdır Yani issetgetiriler gerçek boş bir dize tutan bir değişken için. Cevap şu:

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

Tür Karşılaştırma Tabloları PHP'nin kılavuzunda bu tür sorular için oldukça kullanışlıdır.

issettemelde çekler değişken dışında herhangi değeri varsa boş var olmayan değişkenler her zaman değeri vardır çünkü null adlı . emptybir tür sayaç kısmıdır, issetancak aynı zamanda tamsayı değerini 0ve dize değerini "0"boş olarak değerlendirir. (Yine tür karşılaştırma tablolarına bir göz atın .)


1
empty()Ayrıca PHP 5.5.0'dan itibaren "sadece değişkenler yerine ifadeleri desteklediğini" unutmayın .
ComFreek

8

$ _POST ['param'] değeriniz varsa ve bunun dize türünde olduğunu varsayarsanız,

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

özdeş

!empty($_POST['param'])

4

isset (), bir HTML formundan metin girişlerini ve metin kutularını doğrulamanın etkili bir yolu değildir

Bunu "isset () girdiyi doğrulamanın bir yolu olmadığı" şeklinde yeniden yazabilirsiniz . Girişi doğrulamak için PHP'nin filtre uzantısını kullanın . filter_has_var()değişkenin var olup olmadığını söyleyecektir, filter_input()ancak girdiyi gerçekten filtreleyecek ve / veya temizleyecektir.

filter_has_var()Önceden kullanmak zorunda olmadığınızı filter_input()ve ayarlanmamış bir değişken talep ederseniz filter_input(), basitçe geri döneceğini unutmayın null.


3

Ne zaman ve nasıl kullanılır:

  1. isset ()

0, 1 için doğru , boş dize, değer içeren bir dize, doğru, yanlış

Boş değer için yanlış

Örneğin

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

1 için yanlış , değer içeren bir dize, doğru

Null için doğru , boş dize, 0, yanlış örn.

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False

2

isset, bir şeyin bir örneğinin var olup olmadığını belirlemek için kullanılır, yani eğer bir değişken somutlaştırılmışsa ... parametrenin değeriyle ilgilenmez ...

Pascal MARTIN ... +1 ...

empty (), değişken yoksa bir uyarı oluşturmaz ... bu nedenle, bir değişkeni değiştirmek istediğinizde bir değişkenin varlığını test ederken isset () tercih edilir ...


1

Kullanmak emptyyeterlidir:

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

Ek olarak, bir tamsayı değeri istiyorsanız, bunu da kontrol etmeye değer olabilir intval($variable) !== FALSE.


2
Ayrıca, intval () hiçbir zaman YANLIŞ döndürmez.
Josh Davis

1
'0' geçerli bir dizge olduğu için yeterli DEĞİL, ancak var olup olmadığını kontrol etmek için empty... isset/ filter_has_varkullanılmalıdır.
Yousha Aleayoub

1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

1

Buraya bir değişkenin içinde herhangi bir içerik olup olmadığını kontrol etmenin hızlı bir yolunu aramaya geldim. Buradaki yanıtların hiçbiri tam bir çözüm sağlamadı, bu yüzden işte burada:


Bu giriş olup olmadığını kontrol etmek yeterlidir ''ya null, çünkü:

URL .../test.php?var=sonuçlarını iste$_GET['var'] = ''

URL .../test.phpsonuçlarını iste$_GET['var'] = null


isset()falseyalnızca değişken olduğunda ve değerine ayarlanmadığında döndürür null, bu nedenle onu kullanırsanız trueboş dizeler elde edersiniz ('' ) .

empty()hem gördüğü nullve ''boş, ama aynı zamanda gördüğü '0'bazı kullanım durumları bir sorun olan boş.

'0'Boş muamelesi yapmak istiyorsanız , kullanın empty(). Aksi takdirde aşağıdaki kontrolü kullanın:

$var .'' !== ''falseyalnızca aşağıdaki girdiler için değerlendirilir :

  • ''
  • null
  • false

Yalnızca boşluk ve satır sonu içeren dizeleri de filtrelemek için aşağıdaki denetimi kullanıyorum:

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

0

Bildirimleri önlemek için aşağıdakileri kullanıyorum, bu, varlığın GET veya POST'ta bildirilip bildirilmediğini kontrol eder ve @ önekiyle boş olup olmadığını güvenli bir şekilde kontrol edebilir ve var ayarlanmamışsa bildirimden kaçınabilirsiniz:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}

"Stfu operatörü" ( @) teşvik edilmemelidir ve pasajınız için gerekli değildir. Bu iyi bir cevap değil. Gevşek bir karşılaştırma yapıyorsunuz. Sen de kullanabilirsin !empty().
mickmackusa

1
Ooo adamım ... Bu kötü kodlama örneği için harika. @hata ayıklamayla ilgili sorun yaşamanıza neden olur, sayfa etkisi daha yavaştır ve yine de error_logbir anda 1 GB'ın üzerine sahip olabilirsiniz . Sadece akıllı ve kullanımı olmak !empty(), !is_null()veya böyle bir şey.
Ivijan Stefan Stipić

0

isset (), değişkenin değerle ayarlanıp ayarlanmadığını kontrol etmek için kullanılır ve verilen bir değişkenin boş olup olmadığını kontrol etmek için Empty () kullanılır.

isset (), değişken null olmadığında doğru döndürürken, değişken boş bir dizeyse Empty () true değerini döndürür.


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

Kaynak: Php.net




0

! empty hile yapacak. yalnızca verilerin var olup olmadığını kontrol etmeniz gerekiyorsa isset'i kullanın, diğer boş diğer doğrulamaları işleyebilir

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

?>

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.