2012-06-17 45 views
-1

可能重複:
Global or Singleton for database connection?如何與訪問連接變量在另一個文件

我有在database.php中一個數據庫類然後在相同的文件創建對象; $database = new Database(); 然後我把這個文件包含到另一個文件中 - 這個文件有一個名爲Test的類,裏面的類Test有一個方法test_me。 裏面test_me方法我想訪問數據庫類的$連接變量。我怎樣才能做到這一點?

這是我試過的;

function test_me(){ 
    global $connection; 
    //use $connection on another function.. 
} 

這給了我一個錯誤undefined variable $connection。任何想法我做錯了什麼?

+0

有些人用'singleton's,其他人使用依賴注入。你也可以看看持久連接。 –

+0

你也可以試試'$ GLOBALS ['connection']',但我會認真反思你的代碼的結構。你也可以使用一個'dbconn()'函數,它返回一個靜態聲明的'$ connection'變量,並在你的函數中使用它(有點?['singleton' pattern](http://stackoverflow.com/questions/130878/)全球有或單換數據庫連接))。但是有一些代碼封裝的DI是我對最佳實踐的建議。 –

回答

0

有實現這一目標的幾種方法,簡單的東西應該像

function test_me() 
{ 
    global $database; 

    echo $database->connection; // or do whatever you want with it 
} 
+0

這已經在問題中了。我認爲OP想知道爲什麼它不起作用。 –

2

如果聲明$connection一個全局變量,你的代碼就可以了。

但是最好避免使用全局變量。您可以在Test類中設置連接。

一個例子是:

class Test { 

    protected $connection; 

    public function setConnection($connection) { 
    $this->connection = $connection; 
    } 

    function test_me() { 
    // use $this->connection. 
    //... 
    } 
} 
+0

依賴注入 - 如果你的代碼是組織良好的話,可能是最好的方法。 –

+0

@JaredFarrish是的,DI很容易測試。 – xdazz

+0

你知道嗎,我從來沒有想過它,但有時候'global $ var'沒有正確導入。所以如果需要,我使用'$ GLOBALS ['var']'。任何意見都讚賞這種方法的有效性。 –

相關問題