Совместное использование объектов между несколькими классами с использованием базового класса - PullRequest
0 голосов
/ 24 апреля 2011

Эта статья похожа на мои потребности, но мне больше интересно узнать о конкретном решении, и если это хорошая или плохая идея сделать это. Совместное использование объектов между классами PHP

Скажем, как и в приведенной выше ссылке, у меня есть объект, который я хочу передать нескольким классам, скажем, объект $ 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 сами, так как они уже будут иметь этот объект как свойство, как только класс будет определен.

Я знаю, что внедрение зависимостей - это обычный путь, но действительно ли это когда-либо жизнеспособное решение?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2011

Вам все еще нужно установить db для каждого экземпляра класса - установка его для одного экземпляра не устанавливает его для всех экземпляров ... если, конечно, не свойство static.

0 голосов
/ 24 апреля 2011

Это прекрасно. Я использовал его раньше и никогда не сталкивался с какими-либо проблемами.

...