Как сделать свой собственный PHP IoC / DIC на основе того, как работает Laravel? - PullRequest
0 голосов
/ 20 ноября 2018

Я заинтересован в написании своего собственного 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...