Я заинтересован в написании своего собственного IoC / DIC для PHP, основанного на том, как работает Laravel.Это чисто для изучения, так как это меня интересует, и я хочу лучше понять концепцию.
Я читал документацию Laravel для Сервисных контейнеров и Laravel IoC ,Я понимаю концепцию и почему внедрение зависимостей является хорошей практикой, но я не могу понять, как кодируется такая функциональность.
Возьмите этот пример из Laravel:
class UserController extends Controller
{
/**
* The user repository implementation.
*
* @var UserRepository
*/
protected $users;
/**
* Create a new controller instance.
*
* @param UserRepository $users
* @return void
*/
public function __construct(UserRepository $users)
{
$this->users = $users;
}
}
Мой вопрос: какUserRepository
получает внедренный код мудро на стороне PHP?Как работает фреймворк Laravel в фоновом режиме?Я читал, что Laravel может использовать класс отражения в PHP для достижения этой цели, но я не уверен?
Я также понимаю, что есть также несколько различных способов внедрения зависимости, таких как использование методов установки или разрешения классов с использованиемстатическая функция?Я осознаю и нашел полезным проект Pimple , чтобы помочь в моем понимании, но я больше интересуюсь тем, как способ Laravel работает с автоматической инъекцией классов, может кто-нибудь дать мне быстрый пример, который я могу взять и построитьот?Поскольку с тем, как работает Laravel и его DIC, не вызывается UserRepository через функцию, он просто вводится?- Это то, что меня интересует, как я могу кодировать это сам.
Я также читал, что правильный DIC позволит вам писать конфигурации для каждого класса по-разному, например, XML или PHP-код,способ настроить экземпляр класса перед его внедрением, это правильно?
И есть ли разница между IoC (Inversion of Control) и DIC (Dependency Injection Container)?
Кроме того, чтов этом случае разница между Laravel Service Container и IoC?