Тёмный

PHP-DI - сервис контейнер 

WebForMySelf
Подписаться 109 тыс.
Просмотров 12 тыс.
50% 1

Исходники к уроку тут: webformyself.com/php-di-servi...
В объектно-ориентированном программировании сложно представить скрипт, который работает с использованием всего лишь одного класса, так как, по сути, в этом теряется весь смысл ООП.
Классов может быть сколько угодно, а значит и создаваемых на их основе объектов еще больше. И они должны определенным образом взаимодействовать между собой. Конечно, все зависит от поставленных задач и архитектуры приложения, но так или иначе наиболее часто встречаемый случай - это использование объекта одного класса в методах другого. Как раз об этом мы поговорим в текущем уроке. На практике мы с Вами рассмотрим построение сервис контейнера для реализации механизма внедрения зависимостей.
При этом в рамках одного урока, конечно же, мы с Вами не успеем написать все с абсолютного нуля, поэтому на примере библиотеки PHP DI мы посмотрим, как формируются подобные вещи и возможно она заинтересует Вас для использования в своих проектах.

Опубликовано:

 

12 май 2020

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 26   
@estupidoParapente
@estupidoParapente 2 года назад
Хоспадя, наконец-то понятное и достаточно подробное объяснение предмета! + качественные голос и видео + исходники! Благодарю, парни! Если бы у вас был курс по свежему Slim4 или Twig, я бы купил.
@romanbush5164
@romanbush5164 Год назад
наконец то понятно , что такое DI , теперь в ларке можно будет использовать это. Спасибо.
@FranckMercado
@FranckMercado 4 года назад
I couldn't understand the language but the code was pretty clear and I loved the video, great job!
@yashkevich8164
@yashkevich8164 4 года назад
Неплохое объяснение. не хватает поправок на новичка)) Зачем это все в проекте?
@artem_ib
@artem_ib 2 года назад
Только можно сказать учусь, пишу своё подобие библиотеки в целях обучения и вот да, действительно столкнулся с такой проблемой внедрения зависимостей, когда один класс, зависит от другого, спасибо за решение. Теперь понятно что это за контейнеры всякие в laravel обсуждают
@artem_ib
@artem_ib 2 года назад
И да, понятно что можно и без этого обойтись, если сам себе режиссёр, но думаю нужно стремится писать, как обще принято
@mikurrey416
@mikurrey416 4 года назад
С самого 2012-го, когда DI в PHP вошел в моду, сталкиваюсь с одним и тем же явлением: необходимость его применения в проекте сигнализирует о перегруженности в архитектуре. Если требуется автоматизировать цепочки передачи одного объекта в другой, значит, пора что-то рефакторить. Ну а когда DI применяют просто потому что "это же круто!", тогда вообще ад. Человекопонятность кода снижается в разы Самое красивое применение DI встретил за всё это время в Yii2 - там используется как раз "ручное" создание контейнера с помощью конфигурации, где задаются имена классов и аргументы конструктора для каждого сервиса.
@zazaorg3957
@zazaorg3957 2 года назад
DI нужен не для красивого применения. Он нужен как некоторая прослойка между твоим приложением и огромным количеством библиотек/фрейморвков, которые вы используете
@soversus5374
@soversus5374 3 года назад
Интересный инструмент. Однако считаю, что если его пришлось использовать, что то пошло не так на этапе проектирования.
@konstantinp440
@konstantinp440 4 года назад
Неплохо! Но не понятно - зачем это нужно. Делая сильно зависимым инициализируя объект в другом классе - много труда и этот способ с контейнерами пока настроишь то сё - опять много труда. пример как раз показал переусложнение проекта контейнером где вместо new Foo(); нужно писать $foo->get('Foo')
@user-tq7pw3rw9y
@user-tq7pw3rw9y 4 года назад
А теперь представь что этот Foo(Mail $m) используется в 1000 классов и появилась необходимость добавить в него логгер Foo(Mail $m, Logger $l). Уверяю что этот день ты проглянешь, а ведь еще надо будет проверить что все места в которые ты внес изменения работаю, а тесты пишутся не всегда и не на все. Так же помогает иметь доступ к глобальным объектам таким как работа с базой и выпилить такую штуку как синглтон.
@Maksimasz
@Maksimasz 2 года назад
Все хорошо, вот только не понял зачем везде писать эти "спагетти"(\App\Classes ........) если можно просто вверху страницы написать use \App\Classes ........ . Тогда и код более менее читабельным становится, по крайней мере для новичков. И Второе хоть убейте не понял зачем делать такую сложную архитектуру файлов и папок ??? По моему перебор. Не только код должен быть читаемым, но и архитектура проекта должна быть читаема, если можно так сказать . Тогда и "спагетти" станут короче. А вообще, что бы понять нормально DI , надо самому пару проектов написать своим кодом, без библиотек, потому что можно научиться это делать с помощью библиотеки, но понять как это работает нет.
@EdwVee
@EdwVee 3 года назад
А есть оболочка, чтобы userManager ил Mailer тот же не создавался каждый раз новый?
@XxX-sq8yv
@XxX-sq8yv 4 года назад
Здравствуйте. Скажите, планируются ли новые курсы по Laravel или Symfony?
@olegkostyuk3537
@olegkostyuk3537 3 года назад
Когда же по ларавел курс??
@artem_ib
@artem_ib 2 года назад
24:20 Ручное формирование контейнера
@code184
@code184 4 года назад
Чтоб я делал без этого видео :)
@grommaks
@grommaks 4 года назад
А почему не symfony/dependency-injection? Как часто Вы слышаши что используют php-di в проектах?
@user-of4dc3rh5c
@user-of4dc3rh5c 4 года назад
Здравствуйте! Можно записать урок и по контейнеру symfony/dependency-injection, поросто мне показлось, что php-di более простое для новичков
@konstantinp440
@konstantinp440 4 года назад
по моему мнению, все что требуется эта либа даёт.
@grommaks
@grommaks 4 года назад
@@konstantinp440 Ну вроде бы и да Но, в Laravel не используется В симфони не используется Не знаю как дела обстоят с YII Симфони контейнер достаточно прост в понимании и изучении, и достаточно мощный чтобы в ходе курса дать по нему дополнительные возможности по конфигурации через xml или yaml Вот я и спрашивал, есть ли те, кто испльзовал эот контейнер где либо кроме уроков.
@mister-ace
@mister-ace 3 года назад
А если у меня абстрактный класс?
@user-km6ic7ud8r
@user-km6ic7ud8r 2 года назад
какой нах абстрактный класс??? Объекты от абстрактного класса просто так создать нельзя! А тут речь о объектах!
@mister-ace
@mister-ace 2 года назад
@@user-km6ic7ud8r , ты бы мне еще ответил через 5 лет. Ну, во-первых, объекты от абстрактного класса не то что "просто так создать нельзя", а совсем нельзя, ибо это абстракция. Во-вторых, в контейнерах можно делать привязку реализации к интерфейсам, к тому же абстрактному классу, например(поэтому я и скорее всего спросил год назад). Ну и в целом это видео я бы не рекомендовал смотреть новичкам, лучше почитать нормальную литературу по этому поводу или в документациях по фреймворку, в том же Symfony/Laravel.
@user-km6ic7ud8r
@user-km6ic7ud8r 2 года назад
@@mister-ace ну, во-первых, объекты от абстрактного класса создать можно, с помощью наследования, это просто так как от конкретного класса из абстрактного - нельзя! Поэтому, во-вторых, если параметром выступает абстракция, то аргументом может быть объект, супертипом которого является данная абстракция.
Далее
Сортировка массивов в PHP
16:45
Просмотров 11 тыс.
Чего ожидать от HTTP/3 + Go
51:07
Просмотров 5 тыс.
Почему все ненавидят PHP?
7:36
Просмотров 138 тыс.
Dependency Injection простыми словами
18:17