Kir ---: Мда, тяжелый случай. Советую Вам почитать что-нибудь толковое о контейнерах, сервисах и сервис-ориентированном программировании. Хотя нет, лучше о Haskell. Правда проблема с возможным изменением файлов и содержимого базы данных останется, но от этого уж никуда, ну разве ПЗУ программировать.
Kir ---: Отнюдь не то же самое, прочитайте внимательнее. Жду от вас ваше видение правильного контейнера. Как по мне, то единственная проблема, возможность преднамеренно заменить сервис. Но тут уж ничего не поделать, преднамеренно можно и back-door в код вставить.
Kir ---: самая большая проблема файлов и баз данных в том что ты не знаешь что там и в любой момент оно может измениться и ты это никаким образом не контролируешь.
Если серьезно, но проблемы глобальных переменных в возможности непреднамеренного изменения (совпадение имен) и той самой инициализации.
>И поэтому весь код практически сводится к использованию глобальных переменных. Сравните:
$myService = $this->getContainer()->get('myService');
/* vs */
global $myService;
Это совершенно разные вещи.
global $myService - оздачает что где-то и в какой-то момент вы самостоятельно должны инициализировать $myService. Если сделать это слишком рано, то может оказаться, что вы зря его дергали. Ну и надо как-то определить какой класс для этого будет использоваться.
$myService = $this->getContainer()->get('myService') - сервис будет инициализирован фреймворком именно тогда, когда он вам понадобился. Если для его работы нужны другие сервисы, их инициализация также произойдет лишь при необходимости. Классы, которые будут использоваться в качестве сервисов берутся из конфигурации. Т.е. если вам не нравиться какой-либо сервис, пишите свой класс, вписываете его в конфигурацию и все - все используют его.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.