Skip to content

Instantly share code, notes, and snippets.

Revisions

  1. omarkdev created this gist Mar 9, 2020.
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,41 @@
    <?php

    class UserRepository
    { }

    class UserController {
    private $userRepository;

    public function __construct(UserRepository $repository)
    {
    $this->userRepository = $repository;
    }
    }

    $constructorReflected = new ReflectionMethod(UserController::class, '__construct');
    $constructorParameters = $constructorReflected->getParameters();

    $argumentsToConstruct = [];

    foreach ($constructorParameters as $parameter) {
    $name = $parameter->getClass()->name;
    var_dump($name);
    // string(14) "UserRepository"

    $instance = new $name();
    var_dump($instance);
    // object(UserRepository)#3 (0) {
    //}

    $argumentsToConstruct[] = $instance;
    }

    $userController = new UserController(...$argumentsToConstruct);
    var_dump ($userController);
    // object(UserController)#4 (1) {
    // ["userRepository":"UserController":private]=>
    // object(UserRepository)#3 (0) {
    // }
    //}