2013-03-26 57 views
0

我有一個由amfphp使用的類,我使用其中的一些其他類來完成多個任務。我很好奇,最好的做法是保持這些類的實例是全局的還是在函數範圍內。PHP中保持實例全局或功能範圍內的最佳實踐

例如,

對於全局變量$ config。我使用它在這樣的功能:

global $config; 

對於範圍變量我這樣做。

$config = new Config(); 

現在,當我的程序運行它處理特定任務和關機的一切(我認爲)和上又有不同的任務調用相同。

現在哪一個更好,性能更有效?

+0

'GLOBAL'是不是邪惡的,但如果你有使用'GLOBAL'然後使用'我的整個基礎有一個類'成爲挑戰。這兩個概念上不會在一起 – 2013-03-26 08:49:27

回答

4

由於PHP是基於請求的,因此它在初始化對象時沒有太大區別,因爲它在任何請求中都會重新創建,但使用全局變量被認爲是不好的做法,不應在新代碼IMO中使用。

我建議在第二個例子中創建一個配置類,但是如果您在代碼的多個位置需要它,請不要每次都創建一個新實例,而是使用依賴注入或singelton模式。

辛格爾頓:

public class Config 
{ 
    protected static $instance; 
    public static Instance() 
    { 
     if(self::instance === null) 
      self::instance = new Config(self::key); 
     return self::instance; 
    } 

    private static $key = "213453452"; 
    public function __construct($key) 
    { 
     if($key !== self::key) 
      throw new InvalidArgumentException("Private Constructor"); 
    } 

    //your config 
} 

依賴注入(簡單的例子):

public class MyClass 
{ 
    protected $config; 

    public __construct($config) 
    { 
     $this->config = $config; 
    } 

    public function DoWork() 
    { 
     $subClass = new MySubClass($this->config); 
     //To Stuff 
    } 
} 

$config = new Config(); 
$myClass = new MyClass($config); 
$myClass->DoWork();