Zend Framework küresel olarak ilan değişkenler kapanır mı?

2 Cevap php

Ben Zend Framework yazıyorum web uygulaması içine üçüncü parti kod entegre ediyorum.

Ben entegre etmek istiyorum kod, genel olarak değişkenleri bildirir. Bu kendi başına çalışır, ama ben Zend Framework içinde bunu içermez zaman. Başlangıçta global değişkenler beyanı devre dışı bırakmak Zend Framework şey olduğunu şüpheli. Ben bir denetleyicisi aşağıdaki test kodu vardır:

public function testglobalAction()
{
   $a = 1;
   function b()
   {
      global $a;
      echo $a*2;
   }

   b();
}

Ben koştum 2 karşıt olarak, 0 yazdırır. Ki 2 dışarı aynı web sunucusu baskılar kendi üzerinde aynı kod çalıştıran üstüne.

Ben Zend Registry kullanmak için tüm dünya örneklerini değiştirmek olabileceğini anlıyoruz. Ancak, grep orada değiştirmek zorunda kabaca 700 çizgiler vardır, bu nedenle şu anda mümkün olmadığını bana gösterdi.

Herkes bu sorunu çözmek nasıl biliyor mu?

2 Cevap

Orijinal $ değişken bir küresel değildir.

Bir yöntem içinde bildirilen herhangi bir değişken o yöntemi için yerel, unless daha önce mevcut küresel kapsamı açıklandı.

Bu deneyin

public function testglobalAction()
{
	global $a;
   	$a = 1;
   	function b()
   	{
		global $a;
		echo $a*2;
	}

	b();
}

Mümkün değil gibi No Zend Framework, küresellerle devre dışı bırakmaz. $ GLOBALS dizi php.ini register_globals direktifi tarafından kontrol edilir. Bu ini_set kullanarak çalışma zamanında değiştirilemez.

Başvuru için documentation bakın.

Note: herhangi bir dizin başına php_value geçersiz kılmaları için. Htaccess dosyaları kontrol edin.