2010-05-24 11 views
33

Aşağıdaki PHP kodu 3'dan çıkacaktır.PHP ve C: arasındaki değişken kapsam farkı: blok kapsamı tam olarak aynı değil mi?

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

main(); 

Ancak aşağıdaki C kodu bir derleme hatası oluşturacaktır.

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

    printf("%d", i); 
} 

PHP'deki değişkenler kesinlikle engellenmiyor mu? PHP'de, iç blokta tanımlanan değişkenler dış blokta kullanılabilir mi?

+1

Bu gerçekten zaten kendiniz Yanıtım eğer bir soru değil. –

+2

@Byron - Sadece bunu doğrulamak istiyorum. C. – powerboy

+2

'dan PHP'ye gelenler için neden bu kadar tuhaf geliyor? Bence soru – Andrey

cevap

45

PHP'nin yalnızca işlev kapsamı vardır - if gibi denetim yapıları yeni bir kapsam sunmaz. Bununla birlikte, bildirmediğiniz değişkenleri kullanırsanız, bu sorun olmaz. $i, main() dışında ya da if ifadesi başarısız olursa, ancak yine de serbestçe yineleyebilirsiniz. Eğer bildirimleri dahil etmek PHP'nin error_reporting kümesi varsa tanımlanmadığı bir değişken kullanmaya çalışırsanız

, bu çalışma zamanında bir E_NOTICE hata yayacaktır. Eğer vardı Yani eğer:

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

kod ince aday olacağını, ancak bazı infaz yankılanacak '3' (if başarılı olduğunda) ve $i tanımlanmış olmayacak gibi bazı, bir E_NOTICE ve yankı şey çıkaracağız Eko beyanı kapsamında.

İşlev dışında, $i hiçbir zaman tanımlanmayacaktır (çünkü işlevin farklı bir kapsamı vardır). Daha fazla bilgi için

: http://php.net/manual/en/language.variables.scope.php

+0

çok kapsamlı bir açıklama olarak bir bilgi paylaşımı biçimi olarak bir yanıtla (bir yanıt göndermeniz gerekir) bir soru ortaya çıkarabilir! – powerboy

+2

İyi bir açıklama! ama sadece bir şey yapabileceğin için yapman gereken anlamına gelmez. Tanımlanmamış bir değişken kullanmak kötü bir uygulamadır. –

+0

Oh ve rand çağrısının sonucunun sıfıra eşit olup olmadığını kontrol etmeniz gerekmez. Rand'den önce bir shebang koyabilirsiniz :) – peter