2013-11-01 69 views
4

這是進行PDO連接的正確方法。爲類PDO連接的正確方法

我有不同的類(每個類都有自己的文件),那麼有配置文件包含PDO對象和所有類對象。我做得對,或者有更好的做法。

classA.php

class classA { 

    private $PDO; 

    function __construct($PDO) { 
     $this->PDO = $PDO; 
    } 
    //other functions 
} 

classB.php

class classB { 

    private $PDO; 

    function __construct($PDO) { 
     $this->PDO = $PDO; 
    } 
    //other functions 
} 

classC.php

class classC { 

    private $PDO; 

    function __construct($PDO) { 
     $this->PDO = $PDO; 
    } 
    //other functions 
} 

而且在config.php頁:

include_once("db.php"); //contains db variables values 
try 
{ 
    $PDO = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password, $options); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to connect database: " . $ex->getMessage()); 
} 

require 'classA.php'; 
require 'classB.php'; 
require 'classC.php'; 

$objA = new classA($PDO); 
$objB = new classB($PDO); 
$objC = new classC($PDO); 

幾乎在每個頁面上都包含config.php。

+3

這是完美的和乾淨的代碼。繼續:-)。 – TiMESPLiNTER

+0

我推薦閱讀答案 http://stackoverflow.com/questions/2047264/use-of-pdo-in-classes – rus13th

+0

謝謝@ rus13th,所以你建議「核心」類的做法是更好的方法,然後上面我使用? – fmask

回答

2

短:是的,這是正確的,但不完美。

我認爲你做得對。它被稱爲Dependency Injection

但是您的代碼有重複項(DRY!)。你可以避免使用繼承。

另外。如果你只想「死」,不要捕捉異常。

在幾乎每一頁上都包含config.php。

這將是更好,如果你會做central point of entryFront contoller pattern

+0

謝謝,你能告訴我如何避免'include_once(「config.php」)'頁面並有權訪問類。你能告訴我哪些代碼是重複的,並提供解決方法。感謝您的幫助。 – fmask

+0

您的應用程序應該有一個輸入點:index.php。 [閱讀全文](http://en.wikipedia.org/wiki/Front_Controller_pattern) – sectus

+0

謝謝我會進一步研究。 – fmask