2013-11-29 59 views
3

我有點困惑:單身不好,全局最差。那麼在不同的類之間共享一個對象的最佳做法是什麼,例如PDO連接?我應該在哪裏存儲PDO連接?

我想要使用HTML模板類,ACL類和其他任何相同的數據庫連接。

我知道新的趨勢是使用DI,但哪種做法最好使全球同一PDO連接?也許使用註冊表?或者通過設置爲靜態var?編輯: 這種解決方案呢?

class Connection { 

    protected static $instance; 

    static function init(\PDO $connection) { 
     if(isset(self::$instance)) 
      throw new \Exception('A connection to a database has already been set.'); 

     self::$instance = $connection; 
    } 

    static function exec($query) { 
     return self::$instance->exec($query); 
    } 
} 

Connection::init(new PDO('blahblah')); 

Connection::exec('SELECT * FROM users;'); 
+2

我只是說實用。如果你想使用單身或靜態註冊表。這不像你會[受兇猛的速龍騎兵攻擊](http://xkcd.com/292/) – Phil

+0

本月早些時候有關這個話題的一些很好的討論[在這裏](http://stackoverflow.com/問題/ 19848384/PHP-PDO實例-AS-私人靜態特性)。可能值得你的閱讀 – Phil

+0

謝謝菲爾,我只是想進化:) 我要放棄單身人士,因爲我正在重寫一些代碼,我想以最好的方式做。 – user3047990

回答

1

最好的做法是創建您的PDO實例,然後將它注入到您的類中。這樣你就不必在你的課堂上弄清楚如何連接到你的數據庫。

class Something { 
    /** @var \PDO */ 
    var $pdo; 

    public function __construct(\PDO $pdo) { 
     $this->pdo = $pdo; 
    } 
} 

$class = new \Something($mypdo); 
+0

問題(與這些類型的問題一樣)是保持該範圍 – Phil

+0

這個PDO實例這是一個DI,我有一些麻煩在我的應用程序中使用它,我需要一個不同的解決方案,或者我需要從頭開始重寫它。 – user3047990

相關問題