Ne, daha iyi isset ya da değil?

5 Cevap php

Arasında herhangi bir hız farkı var mı

if (isset($_POST['var']))

veya

if ($_POST['var'])

And which is better veya are they the same?

5 Cevap

Bu isset, aşağıdaki nedenlerle kullanmak iyi bir uygulamadır:

  • $_POST['var'], boş bir dize ya ise "0", isset hala değişken var olduğunu algılar.
  • Isset kullanarak bir uyarı üretecektir.

Onlar aynı değildir. Bir kavramsal dizi düşünün:

$arr = array(
  'a' => false,
  'b' => 0,
  'c' => '',
  'd' => array(),
  'e' => null,
  'f' => 0.0,
);

$x bu anahtarlar ('a' için 'f') ve bu gibi işleri yok anahtar 'g' biridir varsayarsak:

  • $arr[$x] false, bir g için tüm şifreler içindir;
  • isset($arr[$x]) true şifreler a, b, c, d ve f, ancak false, e ve g içindir; ve
  • array_key_exists($x, $arr) true a ila f, false g seyahati şifreler içindir.

Ben booleans için PHP's type juggling, özellikle dönüşüm bakmak öneririz.

Son olarak, ne yaptığınızı denir micro-optimization. Hangisi tarafından onlardan biri daha hızlı olarak algılanmaktadır hangi seçim asla. Daha hızlı, hangisi o never, size güvenilir (Ben herhangi bir istatistiksel olarak anlamlı düzeyde olabilir emin değilim) daha hızlı olduğunu belirlemek olsa bile bir faktör olması gerektiğini fark çok önemsizdir.

Eğer değişkenin değeri test sırasında isset, değişken bir değere sahip olduğunu test eder.

Örneğin:

// $_POST['var'] == 'false' (the string false)
if (isset($_POST['var'])) {
    // Will enter this if
}
if ($_POST['var']) {
    // Won't enter this one
}

Büyük problem iki ifadelerin denklik Denetlediğiniz değişkenin değerine bağlıdır, yani varsayımlar yapamazsınız olmasıdır.

Sıkı PHP, bir değişken kullanmadan önce ayarlanmış olup olmadığını kontrol etmeniz gerekir.

error_reporting(E_ALL | E_STRICT);

Burada ne yapıyorsun

if ($ var)

Değer ayarlanırsa kontrol etmiyor. Yani Sıkı PHP tanımsız değişkenler için bir uyarı üretecektir. (Bu diziler ile çok olur)

Ayrıca sıkı PHP (sadece bir Bilginize sizin veya başkaları için), bir işlevi argüman olarak bir unset var kullanarak bir uyarı atmak ve bu önlemek için fonksiyon içinde isset () kontrol edemez.

Eğer çalıştırmak ise sadece, başkalarının söylediklerini tekrarlayarak:

if($variable)

ve $ değişken not kümesi, bir uyarı hatası alırsınız olduğunu. Artı ..

$var = 0;
if($variable) {
    //This code will never run, because $var is false
}

ama isset kullanarak bu durumda gerçek dönecekti.