2013-10-10 23 views
1

我正在做一個需要一些SQL東西的函數,並且我不想爲每個函數定義一個新的PDO對象,但有一個可以工作的函數在所有功能上。PHP在類中定義一個新的PDO對象(外部函數)

這是我走到這一步:

<?php 
class UserSystem 
{ 
    public $mysqlDetails = 
    [ 
     "host"  => "127.0.0.1", 
     "user"  => "", 
     "pass"  => "", 
     "database" => "", 
     "table"  => "" 
    ]; 

    public $con = new PDO 
    (
     "mysql:host=" . $this->mysqlDetails['host'] . 
     ";dbname=" . $this->mysqlDetails['database'] . ";", 
         $this->mysqlDetails['user'], 
         $this->mysqlDetails['pass'] 
    ); 

我怎麼能得到這個工作?目前,我得到這個錯誤: Parse error: syntax error, unexpected 'new' (T_NEW)。有沒有更好的方式來做到這一點,所以我可以使用的功能$con變量,而無需創建一個新的。 我不想像我見過的那樣將它注入到函數中。 IE這樣的:

<?php 
function someFunc ($pdo) 
{ 
    $pdo->query("SELECT * FROM `someTable`"); 
} 
+0

而不是在類內初始化PDO,你應該將它注入爲依賴項。您可以使用[this](http://stackoverflow.com/a/11369679/727208)方法作爲基礎並加以改進。您當前的實施違反了[SOLID](http://en.wikipedia.org/wiki/SOLID_(面向對象設計))原則中的幾個。 –

回答

1

不能與任何東西,但編譯時間分辨的常數值初始化類屬性。你必須創建在構造函數中的PDO對象:

public function __construct() { 
    $this->con = new PDO(...); 
} 

更重要的是,你應該讓你的類接受一個PDO對象和依賴注入它,因爲我會猜你需要一個數據庫連接不僅僅是這一類,而且你也不想一次又一次地在不同的類中連接同一個數據庫:

public function __construct(PDO $con) { 
    $this->con = $con; 
} 
+0

謝謝你,我現在使用的一個構造函數,解決了一個乾淨簡單的方法我的所有問題。 我做一個私有變量$ CON然後將其設置在構造函數中,如果任何人閱讀此有同樣的問題。 –

相關問題