PHP: uyarmadan tanımlanmamış değişkenler baskı

6 Cevap php

Bir uyarı almadan tanımlanmamış değişkenleri echo için hızlı bir yol olup olmadığını merak ediyorum? (. Ben hata raporlama seviyesini değiştirebilirsiniz ama ben istemiyorum) ben bugüne kadar küçüğüdür:

isset($variable)?$variable:''

Birkaç nedenden dolayı bu sevmediğim:

  • Bu biraz "söz" ve karmaşık
  • $variable tekrarlanır
  • Boş bir dize echoing zaman nazik beni rahatsız ediyor.
  • Benim değişken adları muhtemelen daha uzun olması, örneğin $arrayvar['parameter'] olacak

6 Cevap

Eğer alınan ifsetor () örneği kullanabilirsiniz here:

function ifsetor(&$variable, $default = null) {
    if (isset($variable)) {
        $tmp = $variable;
    } else {
        $tmp = $default;
    }
    return $tmp;
}

örneğin:

echo ifsetor($variable);
echo ifsetor($variable, 'default');

Değişken referans olarak geçirilen çünkü bu bir uyarı oluşturmaz.

Sen @ error suppression operator ile çalıştırabilirsiniz.

echo @$variable;

Ancak, tanımsız değişkenler göz ardı etmek iyi değil. Unset değişkenler senaryo üzerinde mantıksal bir hata gösterebilir, ve tüm değişkenler kullanılmadan önce ayarlanmasını sağlamak için en iyisidir.

Bu a long-standing issue with PHP, umarım bu özelliği yanı sıra PHP 5.3 içine yapacaktır, PHP 6 isset_or() (veya benzer bir fonksiyonu) ile düzeltmek niyetinde olduğu. Şimdilik, senin soru isset () / üçlü, örneğin kullanın veya başka bir hata susturmak için @ öneki kullanmanız gerekir. IMHO, this is the only circumstance that justifies using @ in PHP.

Ben boş bir dize ile echo kullanılarak hız sorunları dert olmaz, boş bir dize echo sadece daha bir if fıkrasında kaydırmak için muhtemelen daha pahalıdır.

Işlevi yürütülürken, hata düzeyini değiştirmek için tercümana zorlar @ operatörü kullanarak hataları bastırır ve daha sonra hata düzeyi geri değiştirin. Bu komut çalışma zamanını azaltır.

Bu nedenlerle en az 3 ortadan kaldıracak gibi bir işlev oluşturmak:

function echoVar($var, $ret=NULL) {
    return isset($var)?$var:$ret;
}

echoVar($arrayvar['parameter']);

Ama neden tanımsız değişkenleri yankılanıyor? Gerçekten iyi kodlu değil gibi Bu sesler ...

Değişken eser @ kullanıyor. i did it.

tanımlanmamış değişkenler çok yaygındır, ben ilk başta null değişken başlatmak için önermek

$var = null;

veya bildirimler hata raporlamayı devre dışı bırakın:

error_reporting(E_ALL^E_NOTICE);