2014-01-22 78 views
0

我想在不實例化類的情況下使用示例類的靜態方法。該方法使用依賴類,並使用__construct方法實例化。這個依賴類如何實例化?例如:使用靜態方法實例化類依賴關係

class user { 
    protected static $db; 

    public function __construct() { 
     self::$db = database::getInstance(); 
    } 

    public static function get_user() { 
     $user = self::$db->query("sql"); 
     return $user; 
    } 
} 

我知道與自動加載磁帶機的解決方案或我可能只是在每一個靜態方法添加self::$db = database::getInstance();。 有人可以給我更好的建議嗎?

回答

2

您可以添加靜態setter和getter爲DB對象,如果有人試圖不先調用setter方法來訪問的getter拋出一個異常:

class User 
{ 
    protected static $db; 

    public static function setDB($db) 
    { 
    self::$db = $db; 
    } 

    protected static function getDB() 
    { 
    if (!self::$db) { 
     throw new Exception('You must `setDB()` the db object before attempting to get it.'); 
    } 

    return self::$db; 
    } 

    public static function getUser() 
    { 
    return self::getDB()->query('sql'); 
    } 
} 

User::setDB(database::getInstance()); 
User::getUser(); 
相關問題