Php 将DB对象传递到经过多次扩展的类中的简单方法

Php 将DB对象传递到经过多次扩展的类中的简单方法,php,oop,class,extends,Php,Oop,Class,Extends,考虑以下PHP代码: <?php require_once("myDBclass.php"); class a { private $tablename; private $column; function __construct($tableName, $column) { $this->tableName = $tablename; $this->column = $column; }

考虑以下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(就像我目前对tablename和column所做的那样),但是我永远不知道我可能会扩展类A多少次,并且认为一定有另一种更简单的方法

有没有人知道一个更好的解决办法,我可以考虑做到这一点? 提前感谢

查看下表。您不应该需要使用
globals
,因为您似乎知道这是不必要的

您可以使用PHP的


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

我不确定提及singleton模式对他有何帮助如果数据库类被设置为singleton类,那么他可以轻松调用
$db=db::singleton()
和viola,他现在有db类可供该类使用,更好的是,它肯定是单个对象,而不是多个/重复对象。更好的是,他可以在脚本中的任何地方使用该对象,只要使用该语句就可以包含dbclass;是的,经过一些阅读,我明白你的意思。我将做一些研究,看看我是否能想出一个更好的答案,因为现在我有点好奇。不过,如果您有更好的答案,请告诉我们。请注意:现在,2012年,Singleton模式似乎过时了,被一些PHP rockstars称为“坏模式”(因为它破坏了单元测试等)。将$db对象传递到其他类(依赖项注入模式)现在似乎更流行。
class A {
    static $db;
    public static function setDB($db) {
        self::$db = $db;
    }
}