如果我在主范围内创建一个对象:
的index.php:
$db = new database();
那么如何在完全不同的类中使用同一个对象呢?
ANYTHING.PHP:
class anything {
function __construct(){
$db->execute($something); # I want to use the same object from INDEX.PHP
}
}
我需要将$ db设为全局还是“更好”更明显的方式?
答案 0 :(得分:1)
您可以使用global
找到它:
class anything {
function __construct(){
global $db;
$db->execute($something);
}
}
或者,您可以在创建新内容时传递它:
class anything {
function __construct($db) {
$db->execute($something);
}
}
这实际上取决于对你最有意义的东西。
答案 1 :(得分:1)
对于数据库,您可能需要使用Singleton pattern
class anything
{
public function load($id)
{
$db = DB::getInstance();
$res = $db->query('SELECT ... FROM tablename WHERE id = '.(int)$id);
// etc...
}
}
如果您需要同时使用不同的数据库连接(例如主数据库和论坛的数据库),您可能需要扩展它。然后你将像DB::getInstance('forum');
一样使用它并将实例存储在关联数组中。
答案 2 :(得分:0)
您可以将其作为参数传递,例如
function __construct($db){
$db->execute($something);
}
然后当您实例化任何内容时,请将其作为anything($db)
答案 3 :(得分:0)
正如Paolo和ONi建议您可以在方法中将$ db定义为全局或将其传递给类的构造函数。传入它将创建对该对象的引用,因此它实际上将是相同的$ db对象。你也可以使用$ GLOBALS数组并以这种方式引用$ db。
$GLOBALS["db"];
我假设index.php和anything.php通过include()或require()或类似方法以某种方式链接在一起?
答案 4 :(得分:0)
在Paolo的帖子中:
传递之后,您可以将其分配给类变量:
class anything {
var $db_obj;
function __construct($db) {
$this->db_obj = $db;
}
function getUsers() {
return $this->db_obj->execute($something);
}
}