php - 将 DB 对象传递到多次扩展的类中的简单方法

标签 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;        
    }

    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”中定义一个新函数时,我都希望以某种方式将它传递给类 a 的函数而不使用全局关键字。

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

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

提前致谢

最佳答案

您可以使用 PHP 的 static properties .

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

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

关于php - 将 DB 对象传递到多次扩展的类中的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631860/

相关文章:

php - 未定义函数 sha256()

c# - 我可以用来定义同名方法的最佳设计是什么?

c# - 是否可以覆盖 C# 中的构造函数?

python - 继承在 Python 中实际上做了什么?

c++ - 使用 Boost,如何在类层次结构更改后反序列化 C++ 类

php - 拉拉维尔 6 : Problem with credentials for MySQL and e-mail on production server only

php - 如何在具有相对路径的多个目录/子目录中使用 PHP includes

php - 未正确接收 cURL header

c# - 定义私有(private)领域和属性(property)与属性(property)

ios - 如何使用变异函数设置类属性?