Küresel kapsam içine bir değişken itin?

3 Cevap php

Biz örneğini ve her yerde (örneğin DB, Cache, Kullanıcı, vb) kolay erişim için $GLOBALS sistem kritik nesneleri koymak kullanın.

Biz $GLOBALS Ben kestirme bir çağrı için $G = &$GLOBALS gibi referans olabilir eğer (evet, gerçekten) biraz kod miktarını düşeceği o kadar kullanabilirsiniz.

Sorun benim deneyim ve google'da birkaç saat başına, ben bir $GLOBALS birinci sınıf verme küresel var dizininde, ve her şeyi ikinci sınıf 'bayrak' sağlar PHP herhangi bir yapı bulamadık, yani .

Ben bir şey eksik? Bu mümkün mü?

3 Cevap

Bunun yerine her şeyi koyarak $GLOBALS Eğer registry concept php dünyada yaygın olduğu bir göz atmak isteyebilirsiniz.

Ancak, birçok global değişkenler / nesneler olan kötü tasarım ve yüksek kavrama bir işaretidir. $G spagetti kod garanti ve yakında gelip bakım kabus gibi bir şey kullanma. Eğer birkaç karaktere göre kod miktarını bırakabilirsiniz kimin umurunda?

Hayır, ama biraz hile kullanabilirsiniz. Global var olarak aynı adla bir küresel işlev oluşturmak ve küresel örneğini döndürmesi gerekir. Örn.:

function db() {
  return $GLOBALS['db'];
}

Şimdi, kod olarak yazabilirsiniz:

...
$stuffs = db()->query("select * from stuff");
...

Sen tekiz desen üzerinde bir varyantı olarak bu tanımak, ama bir sözdizimsel çok daha hoş bir olabilir.

Diğerleri bunu belirtmiştik, ama aynı zamanda not ilk etapta küresel nesneleri kullanarak düşünmelisiniz. Ben genellikle (bağımlılık enjeksiyon) ihtiyaç duyulan yere oraya nesneleri geçmeyi tercih. Ben aşırı olsa kayıt desen bulundu değilim.

Middus işaret kayıt kavramına ek olarak, bu soruya cevaplar bulabilirsiniz bazıları bu etrafında çeşitli yaklaşımlar ve kavramlar vardır:

In a PHP project, how do you organize and access your helper objects?