В официальной документации Symfony, есть такие примеры как
use Symfony\Component\HttpFoundation\Session\SessionInterface;
public function index(SessionInterface $session)
{
// stores an attribute for reuse during a later user request
$session->set('foo', 'bar');
// gets the attribute set by another controller in another request
$foobar = $session->get('foobar');
// uses a default value if the attribute doesn't exist
$filters = $session->get('filters', []);
}
Я хочу узнать как это работает, что если передать как аргумент функции Interface, то при ее вызове функции получит его автоматически. Хочу применить это в проекте который изначально, к сожалению, был написан без фреймворка.
Не так давно я сам задавал такой вопрос. В PHP есть такое понятие как Рефлексия, вот цитата из Википедии.
В информатике отражение или рефлексия (холоним интроспекции, англ. reflection) означает процесс, во время которого программа может отслеживать и модифицировать собственную структуру и поведение во время выполнения. — Wikipedia.
Говоря на простом языке, программа анализирует сама себя и перед тем как вызвать метод контроллера она смотрит на входные параметры и если находит пытается зарезолвить. Откуда она их берет? Из контейнера свойств.
Все это можно написать самому но нужны хорошие знания ООП и шаблонов проектирования.
Такой подход реализован у многих фреймворках включая Symfony и Laravel
Вот вам некоторые ссылки по которым я делал нечто похожее:
Официальна документация раздела Reflection на сайте php.net
Статья на Хабре Введение в PHP Reflection API
Статья Что такое внедрение зависимостей в PHP
Это довольно обширный вопрос и вместить все в один ответ просто не получится, он тянет как минимум на целую статью с ссылками на источники для дальнейшего изучения. А это я так просто пальцем указал в каком направлении двигаться.
Эту магию делает Service Container
и в частности autowiring
. Ежели раньше нужно было зависимости брать непосредственно из контейнера, в случае с Контроллером либо описвать в services если вы описываете зависимости для сервиса, то начиная с версии 3.4 ServiceContainer умеет делать эту самую магию. Никто лучше официальной документации наврядли вам объяснит, а посмотреть это можно например тут да и вообще стоит прочитать всю эту страницу.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие вообще есть варианты из программ создающих анимированный гиф, с возможностью их запуска с параметрами из терминала, например через...
Есть input куда пользователь может ввести число больше нуляПо нажатию кнопки должна запускаться функция, которая выводит числа от введенного...