<?php class UserRepository { } class UserController { private $userRepository; public function __construct(UserRepository $repository) { $this->userRepository = $repository; } } $userReflected = new ReflectionClass(UserController::class); var_dump($userReflected); // object(ReflectionClass)#1 (1) { // ["name"]=> // string(14) "UserController" //} $constructorParameters = $userReflected->getConstructor()->getParameters(); $argumentsToConstruct = []; foreach ($constructorParameters as $parameter) { $name = $parameter->getClass()->name; var_dump($name); // string(14) "UserRepository" $instance = new $name(); var_dump($instance); // object(UserRepository)#2 (0) { //} $argumentsToConstruct[] = $instance; } $userController = new UserController(...$argumentsToConstruct); var_dump($userController); // object(UserController)#4 (1) { // ["userRepository":"UserController":private]=> // object(UserRepository)#2 (0) { // } //}