我可能的重复项:
PHP 和 PDO 类问题
想知道是否有人可以帮助我有一个基本的 php PDO 扩展类,我想在其他类中使用全局$db来完成所有 mysql 工作。我可以连接到数据库,但只想使用可以在任何类中访问的全局变量。
但是我不想用我的新类扩展数据库类,我也不想在类构造函数中传递数据库连接 var。
有没有办法做到这一点?
这是一些编码示例,我想原谅任何编码错误。
//--DATABASE CLASS
class Database Extends PDO {
protected $database_hostname = DB_HOST;
protected $database_username = DB_USER;
protected $database_password = DB_PASSWORD;
protected $database_name = DB_NAME;
protected $database_type = DB_TYPE;
public function __construct() {
try {
parent::__construct($this->database_type . ':host=' . $this->database_hostname . ';dbname=' . $this->database_name, $this->database_username, $this->database_password, array(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION));
} catch (PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
}
}
//--TEST CLASS
class test1 {
//--INSIDE MY FUNCTIONS I WANT TO BE ABLE TO USE A $db to do my msql stuff
public function test1a() {
$stmt = $db::prepare('SELECT * FROM table');
$stmt->excute();
}
}
//--TEST CLASS 2
class test2 {
public function test2a() {
$stmt = $db::prepare('SELECT * FROM table');
$stmt->excute();
}
}
//--CREATE THE DATABASE GLOBAL
$db = new Database();
$testers = new test2();
如果我执行上述操作,我会得到一个错误,说$db是未定义的变量:db
虽然我读到不推荐这样做,但您可以执行以下操作: 在所有类之外(在全局范围内)初始化连接:$db = new Database();
然后在需要 Db 连接的每个函数中,编写以下内容:
global $db;
在函数中使用$db
时,PHP 希望变量位于局部函数范围内。要访问全局变量,请使用
-
$GLOBALS['db']->prepare
(重要提示:使用->
而不是::
;静态调用prepare
将不起作用),或 -
global $db; $db->prepare(...);