如何在类中使用不同的对象?

时间:2009-05-29 01:33:14

标签: php oop class object

如果我在主范围内创建一个对象:

的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设为全局还是“更好”更明显的方式?

5 个答案:

答案 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);
    }
}