数据库类(未定义变量)


PHP OOP - Database class (Undefined variable)

用PHP学习OOP我已经创建了一个数据库类,但我正在获得未定义的变量db_host db_name db_username和db_password。我已经尝试了$this->db_host,它删除了db_host的未定义变量,但随后我得到一个致命的错误,说"使用$this时不在对象上下文中"。

<?php
class database
{
    private $db_host = "";
    private $db_username = "";
    private $db_password = "";
    private $db_name = "";
    static function connect()
    {
        try {
            new PDO("mysql:host=" . $db_host . '; dbname=' . $db_name, $db_username, $db_password);
            setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $db_error) {
            echo $db_error->getMessage();
        }
    }
}
?>

您不能从静态函数访问非静态实例字段(但是您可以从非静态方法访问静态实例字段和函数)。此外,你正在滥用"setAttribute"函数。

你应该让你的实例变量是静态的,并使用self关键字:

class database
{
    private static $db_host = "...";
    private static $db_username = "...";
    private static $db_password = "...";
    private static $db_name = "...";
    public static function connect()
    {
        try {
            $dbConnection = new PDO("mysql:host=" . self::$db_host . '; dbname=' . self::$db_name, self::$db_username, self::$db_password);
            $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $db_error) {
            echo $db_error->getMessage();
        }
    }
}

或者,使用$this关键字使函数非静态并与类变量相关:

class database
{
    private $db_host = "...";
    private $db_username = "...";
    private $db_password = "...";
    private $db_name = "...";
    public function connect()
    {
        try {
            $dbConnection = new PDO("mysql:host=" . $this->db_host . '; dbname=' . $this->db_name, $this->db_username, $this->db_password);
            $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $db_error) {
            echo $db_error->getMessage();
        }
    }
}

如何处理"dbConnection"变量?现在它没有任何用处。你应该return它,或绑定另一个实例字段与它。