2014-01-22 42 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(); 
相关问题