Вопрос по идеологической части

127

Новичок
Вопрос по идеологической части

Вот сидим и спорим тут на тему как делать идеологически кошернее.
Предположим, есть 2-3 класса, которые должны работать совместно.
Есть три варианта как это сделать
1) Передать в конструктор нужный класс и инициировать присвоением $this->var = $peredanniy_class
2) втыкать в нужные методы нужные методы классов через globals
3) наследование
Какой вариант идеологически более верен?
 

rotoZOOM

ACM maniac
1. Напоминает Dependency injection.
2. Напоминает Singleton либо Register.
3. Используется в достаточно четко определенных случаях.

Ответь на мой вопрос.
У меня есть еда. Кому ее лучше скормить: льву, носорогу или воробью?
 

findnext

Новичок
Какой вариант идеологически более верен?
честно не знаю, я бы сделал вот так
PHP:
$reg = new reg;
$class1 = new class1($reg); 
$reg->set('class1', $class1); 
$class2 = new class2($reg); 
$reg->set('class2', $class2); //и т.д
 

AmdY

Пью пиво
Команда форума
findnext
нету залотого копья, всё зависит от ситуации, советую всё же и тебе прочесть статью по ссылке.
 

Духовность™

Продвинутый новичок
ИМХО

Если мы имеем класс "пользователь" и класс "группа", то логично добавлять пользователя в группу через метод. Мы таким образом моделируем структуру реальных данных. dependency injection:

PHP:
$user = new User($_POST['user_data']);
$group = new Group();
$group->addUser($user);
$group->save(); //...
А если у нас в кучи классов нужно использовать объект БД, то тут логичнее всего синглетоном получать экземпляр непосредственно внутри класса, ибо нет никакого смысла каждый раз делать dependency injection.

PHP:
class Execution ....
    public function __construct()
    {
        $this->db = Database::getInstance();
    }
аналогия ясна?

-~{}~ 23.12.08 16:12:

советую всё же и тебе прочесть статью по ссылке
статья ровным счетом ничего не дает. просто описываются те или иные зависимости, какие могут быть, а какие именно применять на практике - дело мозгов уже разработчика.
 
Сверху