PHP ve C arasında değişken kapsamı farkı: blok kapsamı tam olarak aynı değil mi?

1 Cevap php

Aşağıdaki PHP kodu irade çıktı 3.

function main() {
    if (1) {
        $i = 3;
    }
    echo $i;
}

main();

Ancak aşağıdaki C kodu bir derleme hatası çıkaracağız.

void main() {
    if (1) {
        int i = 3;
    }

    printf("%d", i);
}

Yani PHP değişkenleri kesinlikle blok kapsamlı değil mi? PHP, iç bloğu içinde tanımlanan dış değişkenler blok içinde kullanılabilir?

1 Cevap

PHP tek işlevi kapsamı vardır - örneğin if yeni bir kapsam tanıtmak yok gibi kontrol yapıları. Eğer beyan değil değişkenleri kullanmak Ancak, o da akla gelmez. $i deyimi başarısız olursa main() dışında ya da eğer yok, ama yine de özgürce yankı.

Eğer bildirimleri içerecek şekilde ayarlanmış PHP'nin error_reporting varsa tanımlanmamış bir değişken kullanmaya çalışırsanız, bir E_NOTICE hata at runtime yayacaktır. Eğer olsaydı Yani:

function main() {
 if (rand(0,1) == 0) {
  $i = 3;
 }
 echo $i;
}

Kod iyi çalışır, ancak bazı infazlar (if başarılı olduğunda) ''3 yankı ve bazı bir E_NOTICE ve yankı şey yükseltmek gibi {[(2)] olacaktır } echo deyimi kapsamında tanımlı olmayacaktır.

(Işlev farklı bir kapsama sahiptir çünkü) işlevi dışında, $i tanımlanabilir asla.

Daha fazla bilgi için: http://php.net/manual/en/language.variables.scope.php