使用静态方法实例化类依赖项

时间:2014-01-22 23:00:56

标签: php class dependency-injection

我想在没有实例化类的情况下使用示例类的静态方法。此方法使用依赖类,并使用__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();。 有人可以向我展示更好的建议吗?

1 个答案:

答案 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();