2012-03-09 56 views
0

我有一些類有時應該在同一請求期間連接到數據庫。我想過的解決方案是將PDO對象作爲方法的參數。有一類是DB()創建的連接和存儲到一個公共屬性:使用作爲參數給出的變量對象

class DB{ 
    public $conn; 
    public function DB(){ 
     $this->conn = new PDO(...);//missed :S thxs! 
    } 
} 

class Foo{ 
    public function Foo($db[, $more_possible_variables]){ 
     //implementing some stuff with $db 
    } 
} 

/*index.php*/ 
require_once 'DB.php'; 
require_once 'Foo.php'; 

$db = new DB(); 
$foo = new Foo($db->conn); 
/*End of index*/ 

我嘗試了一些想法,使這項工作,但我總是那是不可能處理一個變量,如錯誤一個東西。我有其他的解決方案,但他們不是從效率的角度來看推薦...

+0

確保你沒有錯過$ this-> conn那裏。您正在將PDO對象分配給本地變量。 – Nathan 2012-03-09 23:33:51

+0

我發現我的代碼有同樣的錯誤! – matt 2012-03-09 23:42:33

回答

0

首先,請確保您沒有遺漏對象引用$ this那裏,否則您將分配PDO對象一個局部變量而不是成員變量。

作爲一個很好的設計實踐,您應該考慮使用像Singleton這樣的設計模式,這樣可以保證在這種情況下,只會爲每個請求創建一個PDO對象實例。

你可以在PHP documentation中看到這個示例的實現。

這將是你想達到什麼樣的一個簡化版本:

class DB { 
    private static $_Instance = null; 
    protected $_PDOInstance = null; 

    private function __construct() { 
     // Create the PDO Object 
     $this->_PDOInstance = new PDO(...); 
    } 

    public static function getInstance() { 
     if(self::$_Instance !== null) { 
      return self::$_Instance; 
     } 

     $className = __CLASS__; 
     self::$_Instance = new $className; 

     return self::$_Instance; 
    } 
} 

要了解更多關於設計模式以及如何使用它們,你可能要前往的wikipedia article就不管了,還是讀一本令人驚歎的書,像GoF - 設計模式:可重用面向對象軟件的元素。