用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
它,或绑定另一个实例字段与它。