通过construct设置类静态属性

时间:2016-09-06 22:46:49

标签: php singleton

我目前有以下代码:

class User {
    private static $_db;

    public function __construct () {
        self::$_db = Database::getInstance()->getConnection();
    }

    public static function addUser ($name, $username, $password) {
        // Define Values
        $name = ucwords(trim($name));
        $username = strtolower(trim($username));
        $password = password_hash($password, PASSWORD_BCRYPT);

        // Define Query
        $query = "INSERT INTO `users` (name, username, password) VALUES(:name, :username, :password)";

        // Prepare Query
        $preparedQuery = self::$_db->prepare($query);

        // Execute Query
        $preparedQuery->execute([
            ':name' => $name,
            ':username' => $username,
            ':password' => $password
        ]);
    }
}

我试图通过构造设置我的数据库连接的类属性。问题是我希望能够通过简单地调用addUser()来访问脚本中任何位置的User::addUser()方法。有没有办法可以通过构造设置静态属性,还是有更好的方法来访问我的数据库?

1 个答案:

答案 0 :(得分:1)

仅在创建类的新实例时调用构造。由于ReadJson是静态方法,因此新实例未创建,您的构造函数将不会被调用,静态existingValue变量将永远不会被初始化。

我会添加一个静态方法来返回与db的连接,你可以在整个代码中随处使用它。例如:

Bar

如果您希望继续使用静态属性,可以为属性创建静态setter(在调用addUser()之前,您需要至少调用此方法一次):

$_db