PHP global değişkenler kötü bir uygulama olarak kabul edilir?

3 Cevap php
function foo () {
    global $var;
    // rest of code
}

Benim küçük bir PHP projelerinde genellikle usul yol. Ben genellikle sistem yapılandırmasını içeren bir değişken var, ve ben bir fonksiyonu bu değişkene erişmeye Nead zaman, ben global $var; yapmak.

Bu kötü bir uygulama mı?

3 Cevap

Insanlar diğer dillerde global değişkenler hakkında konuşmak o PHP ne farklı bir şey anlamına gelir. Değişkenler PHP really küresel değil çünkü bu. Tipik bir PHP programının kapsam, bir HTTP isteği olduğunu. Bunlar genellikle pek çok HTTP isteklerini kapsayacak, çünkü Oturum değişkenleri aslında daha geniş bir kapsamı PHP "küresel" değişkenler var.

Genellikle (? Zaman) zaman preg_replace_callback() bu gibi benzeri yöntemler üye işlevleri çağırabilirsiniz:

preg_replace_callback('!pattern!', array($obj, 'method'), $str);

callbacks daha fazla bilgi için bkz.

Noktası nesneleri PHP üzerine cıvatalı ve bazı yönlerden bazı beceriksizlik yol edilmiş olmasıdır.

PHP farklı dillerden standartları veya yapıları uygulanması ile aşırı dert etmeyin. Başka bir ortak tuzak şeyin üstüne nesne modellerini kalarak saf bir OOP dili içine PHP açmak için çalışıyor.

Düşündüğün değil, çünkü mantıklı bir sorunu çözer, yazmanız gereken kod miktarını azaltır veya daha sürdürülebilir ve anlamak daha kolay hale getirir, çünkü başka bir şey gibi, "küresel" değişkenleri, usul kodu, belirli bir çerçeve ve OOP kullanmak yapmanız gerekir.

Global değişkenler dikkatlice kullanılmadığı takdirde bulmak için sorunlar zorlaştırabilir. Diyelim ki bir php script istek ve size bazı işlevi bulunmayan bir dizinin bir dizin erişmeye çalışıyoruz söyleyerek bir uyarı olsun diyelim.

Erişmeye çalıştığınız dizi işlevi yerel ise, sen orada bir hata yapmış görmek için fonksiyonunu kontrol edin. Eğer fonksiyon denir yerlerde kontrol böylece işlevine bir giriş ile ilgili bir sorun olabilir.

Bu diziyi küresel Ama eğer global değişken, ve sadece o, sizin global değişken için bu başvurular erişilen hangi sırayla anlamaya zorunda kullanan tüm yerleri kontrol etmeniz gerekir.

Eğer bir kod parçasının bir küresel değişkeni varsa, bu zor bu kodu işlevselliğini izole etmek için yapar. Neden işlevselliği izole etmek istersiniz? Yani bunu test edebilirsiniz ve başka bir yere yeniden. Eğer test etmek gerekmez bazı kod var ve global değişkenleri kullanarak sonra yeniden gerekmez ise gayet iyi.

i cletus katılıyorum. i iki şey eklemek istiyorum:

  1. hemen küresel olarak tanımlamak böylece bir öneki kullanmak (örn. $ g_)
  2. kod etrafında hepsini yağmurlama gitmez, bir yerde bunları yayınlama.

best regards, don