Ayarlanmamış olabilir, bir değişkene NULL değeri için test

4 Cevap

Göz önüne alındığında:

  • Bir değişken seti ve null değilse isset() DOĞRU döner inşa
  • Değişkeni ayarlı değilse is_null() function bir uyarı atıyor

Değişken bir haber bastırmak için @ operatörü kullanmadan, olursa olsun NULL ya da değil var olup olmadığını test etmek için bir yolu var mı?


EDIT

Birlikte ilk yanıt, ben bu düşünüyordum ve ben get_defined_vars teftiş () NULL bir değişken seti ve bir unset değişken arasındaki ayırt etmek tek yol olduğunu sonucuna alıyorum. PHP küçük ayrımlar yapmak gibi görünüyor:

<?php

$exists_and_is_null = NULL;

// All these are TRUE

@var_dump(is_null($exists_and_is_null));
@var_dump(is_null($does_not_exist));

@var_dump($exists_and_is_null===NULL);
@var_dump($does_not_exist===NULL);

@var_dump(gettype($exists_and_is_null)=='NULL');
@var_dump(gettype($does_not_exist)=='NULL');

?>

4 Cevap

Zaten öğrendim gibi, yapamazsın:

  • o false olan bir değişken için iade olarak, isset güveniyor null.
  • Bir haber yükseltmek olacak gibi, $not_exists===null kullanın.


But you could be able to use a combinaison of :


For instance :

$exists_and_null = null;
$exists_and_not_null = 10;

$defined_vars = get_defined_vars();

// true
var_dump(array_key_exists('exists_and_null', $defined_vars) 
    && $defined_vars['exists_and_null']===null);

// false
var_dump(array_key_exists('exists_and_not_null', $defined_vars) 
    && $defined_vars['exists_and_not_null']===null);

// false
var_dump(array_key_exists('not_exists', $defined_vars) 
    && $defined_vars['not_exists']===null);


A couple of notes :

  • In the first case, the variable exists => there is an entry in the list returned by get_defined_vars, so the second part of the condition is evaluated
    • ve bu durumun iki parça true vardır
  • In the second case, the variable exists too, but is null
    • , bu durumun ilk bölümü true anlamına gelir, ancak ikinci bir false olduğu
    • böylece bütün ifade false.
  • In the third case, the variable doesn't exist,
    • bu, durumun ilk bölümü false demektir
    • ve durumun ikinci bölümü değerlendirilir değil - ki bu bir haber yükseltmek anlamına gelir.

- ^ ^ get_defined_vars muhtemelen çok yavaş çağrısı yaparken isset bir dil oluşumudur ve hızlıdır: ama bu performansları hakkında bakım eğer iyi bir fikir, muhtemelen olmadığını unutmayın

Böyle bir karşılaştırma gerektiren herhangi bir kodu yanlış olan semantik kazanılmış olurdu burada iddia ediyorum; Ikisi arasında ayrım yok basit bir yol var bir dilde null is unset bir değer.

Ben (Ben geliştirmek zaman ben sadece E_ERROR monitör) bir PHP uyarısı ateşlenmesine, kolayca bu kontrol akılda tutmak için bir kendine yarattığı işlevi kullanılır.

    function isNullOrEmpty( $arg )
    {
        if ( !is_array( $arg ) )
        {
            $arg = array( $arg );
        }

        foreach ( $arg as $key => $value )
        {
            if( $value == null || trim($value) == "" )
            {
                return true;
            }
        }
        return false;
    }
if (isset($var) && (is_null($var)) {
    print "\$var is null";
}

Bu hile yapmak gerekir.