3

考虑以下 PHP 代码:

<?php
require_once("myDBclass.php");
class a {
    private $tablename;
    private $column;
    function __construct($tableName, $column) {
        $this->tableName = $tablename;
        $this->column = $column;        
    }

    function insert() {
        global $db;
        $db->query("INSERT INTO ".$this->tableName." (".$this->column.") VALUES (1)");  
    }       
}

class x extends a {
    function __construct() {
        parent::construct("x", "colX"); 
    }
}

class y extends a {
    function __construct() {
        parent::construct("y", "colY"); 
    }
}
?>

我有我的 $db 对象,该对象在另一个文件中实例化,但希望以某种方式将其传递到类 a 的函数中,而不使用 global 关键字,每次我在类“a”中定义一个新函数时。

我知道我可以通过在实例化类 X 和 Y 时传递 DB 对象,然后以这种方式将它传递给类 A 来做到这一点(就像我目前正在处理表名和列一样),但是我不知道我可以扩展多少次类A 并认为一定有另一种更简单的方法。

有人知道我可以考虑实现这一目标的更好解决方案吗?

提前致谢

4

2 回答 2

2

您可以使用 PHP 的静态属性

class A {
    static $db;
    public static function setDB($db) {
        self::$db = $db;
    }
}

现在该属性将在该对象及其子对象的所有实例之间共享。

于 2010-09-02T22:59:57.787 回答
1

查看单例设计模式。您应该不需要使用globals,因为您似乎知道没有必要。

于 2010-09-02T22:59:40.830 回答