2013-10-21 17 views
-1

數據庫連接如何使PDO對象在代碼的任何部分(在對象,函數,方法,腳本等中)都可用?

$db_user = 'root'; 
$db_pass=''; 
$db = new PDO('mysql:host=localhost;dbname=resource_management', $db_user, $db_pass); 

這裏User類它的創建

class User{  
    protected $username; 
    protected $pass; 
    public function __construct($username, $password){ 
     $this->username = $username; 
     $this->password = $password; 
    } 
    public function test(){  
     $sql = "select * from user"; 
     $data = $db->query($sql); 
     while ($row = $data->fetch(PDO::FETCH_OBJ)){ 
      var_dump($row); 
      echo $row->username; 
     } 
    } 
} 

在這裏,我嘗試測試User類

$user = new User('admin', 'test'); 
$user->test(); 
+1

諸如PASSWORD之類的東西絕不能成爲你的代碼的一部分..它唯一的地方就在於登錄/註冊功能。 一旦你已經登錄用戶,你可以通過保存的用戶ID在Session中獲取它.. – Svetoslav

+0

我希望下一行不是'if($ password == $ row ['password'])'(; –

回答

3

你通常通過它在構造和使用自動裝載參數的工廠模式:

class Factory{ 
    public static function setdb($db) { 
    self::$db = $db; 
    } 

    public static function getUser($role, $action) { 
    return new User(self::$db, $role, $action); 
    } 

    public static function getUserPermissions($role, $action) { 
    return new UserPermissions(self::$db, $role, $action); 
    } 
    } 

就是這樣的。注意:我不是模式專家,現在我正在學習它,所以上面的代碼可能包含錯誤/不完美。然後你可以訪問它:

$DB = new PDO(...); 
factory::setdb($DB) 

$User = Factory::getUser('admin', 'test'); 

我認爲代碼是不言自明的。然後,您可以添加其他方法來創建更多對象,並自動將它們傳遞給所需的變量,因此您無需手動編寫所有對象。它被稱爲工廠模式。您可以根據需要添加更多方法。

注2:雖然全局是可能會想到的東西,它是一個terrible idea

相關問題