видимо, просто времени не много.
Смотрите батхерт очень простой.
У нас есть Заказ. И кто-то решил добавить функционал по распечатыванию заказа на чеке.
Есть класс Order. Что делает эфимерный программист с айкью ниже среднего - добавляет в него паблик метод print();
PHP:
class Order
{
public function print ()
{
}
}
Так что делаем дальше? Дальше нам надо напечатать, поэтому создадим класс отвечающий за это Printer с паблик методом print()
PHP:
class Printer
{
public function print()
{
}
}
А вот дальше у него уже появляются проблемы, как же в экземпляре заказа получить экземпляр принтера? Ага! Сделаем глобал переменную и туда положим принтер!
PHP:
$_GLOBAL['Order_Printer'] = new Printer();
class Order
{
public function print ()
{
$_GLOBAL['Order_Printer']->print($this);
}
}
Все круто, задача решена, но недомерки с форума обсмеяли решение, сказали что глобалы юзают только тупые. А надо DI. Окей, добавим немного DI в код.
PHP:
class Order
{
protected $printer;
public function setPrinter(Printer $object)
{
$this->printer = $object;
}
public function print ()
{
$this->printer->print($this);
}
}
$di = new Di();
$container = $di->create('order', '\Order');
$container->setDependency('setPrinter', new Printer);
$order = $container->instantiate();
$order->print();
Все круто! Нет глобала, Di помог мне, мой код крутой! И Di Никто напрямую не дергает.
Пример конечно утрирован, но такое встречается повсеместно. И надо отдавать себе отчет, что этот тот же глобал только в профиль.