Php 使用基类在多个类之间共享对象

Php 使用基类在多个类之间共享对象,php,dependency-injection,abstract-class,Php,Dependency Injection,Abstract Class,这篇文章与我的需求类似,但我更好奇它的具体解决方案,以及这样做是好是坏 比如说,就像上面的链接一样,我有一个要传递给多个类的对象,比如$db对象 与其使用依赖注入并将其传递给每个方法的构造函数,还不如让所有类扩展一个Base类,该类将$db对象存储为属性 例如: abstract class Base { protected static $_db; public function setDatabase( Database $db ) { $this->_

这篇文章与我的需求类似,但我更好奇它的具体解决方案,以及这样做是好是坏

比如说,就像上面的链接一样,我有一个要传递给多个类的对象,比如$db对象

与其使用依赖注入并将其传递给每个方法的构造函数,还不如让所有类扩展一个Base类,该类将$db对象存储为属性

例如:

abstract class Base {
    protected static $_db;
    public function setDatabase( Database $db ) {
        $this->_db = $db;
    }
    public function getDatabase() {
        return $this->_db;
    } 
} 

class SomeClass extends Base {
    public function doStuff() {
       $result = $this->getDatabase()->query(.....);
    }
}
这意味着所有扩展Base的类都不必担心抓取/检查/设置$db本身,因为一旦定义了类,它们就已经将该对象作为属性了

我知道依赖注入是通常的做法,但这是可行的解决方案吗


谢谢

那太好了。我以前使用过它,从来没有遇到过任何问题。

您仍然需要在类的每个实例上设置db-在一个实例上设置db不会在所有实例上设置db。。。当然,除非它是一个
静态属性。

对不起,我忘了在上面写static!我已经在实际代码中使用了static。所以你同意这是一个好的解决方案(只要使用静态)?我不认为我会推荐它。。。如果有几个实例需要使用不同的连接,该怎么办?如果您使用静态数据库,至少您应该能够将连接传递到与db交互的每个方法。。。也就是说,我以前就这样做过,所以我真的不能怪你。我想这取决于你应用程序的复杂程度:-)嗯。一个解决方案是让另一个类重写get/setDatabase,以便在需要时使用它自己的$db变量。谢谢你的帮助!