Совместное использование объектов между классами PHP - PullRequest
4 голосов
/ 04 мая 2009

Каков наилучший способ обмена объектами между другими классами?

Например; объект «база данных» с функциями, которые требуются объектам «article» и «user».

Я не хочу использовать глобалы (включая синглтоны) или создавать новый экземпляр объекта в каждом классе, например

function __construct() {
    $this->database = new database;
    $this->cache = new cache;
}

Будет ли проходить объекты, например,

class test{
    function __construct( $obj ) {
        $this->obj = $obj;
    }
}
$database = new database;
$test = new test( $database );

Будет ли путь?

Ответы [ 5 ]

6 голосов
/ 04 мая 2009

Да. Передача объектов конструктору - или установщику - это лучший способ. Этот шаблон известен как внедрение зависимостей . У него есть дополнительное преимущество, заключающееся в том, что он облегчает тестирование вашего кода (с использованием заглушек или макетов).

1 голос
/ 04 мая 2009

Да, это именно то, что вы хотите сделать. Если у класса есть внешние требования, не создавайте их внутри класса, но требуйте их как аргументы в конструкторе.

0 голосов
/ 04 мая 2009

Вы также можете использовать объекты, которые были загружены в сеансе или в кэше (APC, memcached) ранее. Personnaly я думаю, что синглтон - лучший способ туда пойти (особенно для класса базы данных)

0 голосов
/ 04 мая 2009

Это был бы шаг в правильном направлении, но мне действительно кажется, что вы действительно действительно хотите иметь синглтон, даже если на самом деле не ограничены в коде.

0 голосов
/ 04 мая 2009

Путь был бы синглетонами, если у них есть один экземпляр. Если нет, то единственный способ - передать их во время инициализации (скажем, в конструкторе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...