我想在没有实例化类的情况下使用示例类的静态方法。此方法使用依赖类,并使用__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();
。
有人可以向我展示更好的建议吗?
答案 0 :(得分:2)
您可以为db对象添加静态setter和getter,如果有人尝试访问getter而不先调用setter,则会抛出异常:
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();