Reflection.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\Utils;
  4. use Symfony\Component\DependencyInjection\ContainerInterface;
  5. /**
  6. * Class Reflection : Gestion des réflection de class
  7. * @package App\Service\Utils
  8. */
  9. class Reflection
  10. {
  11. public function __construct(private ContainerInterface $container)
  12. { }
  13. /**
  14. * Appel une fonction avec ses paramètres depuis le nom d'un service
  15. * @param string $serviceName
  16. * @param string $method
  17. * @param array $parameters
  18. * @return mixed
  19. */
  20. public function dynamicInvokeServiceWithArgsAndMethod(string $serviceName, string $method, array $parameters = []): mixed
  21. {
  22. $class = $this->container->get($serviceName);
  23. //verif méthode exist
  24. if(method_exists($class, $method))
  25. return $class->{$method}(...$parameters);
  26. throw new \LogicException("method_not_exist", 400);
  27. }
  28. /**
  29. * Appel une fonction avec ses paramètres depuis le nom d'une classe
  30. * @param string $serviceName
  31. * @param string $method
  32. * @param array $parameters
  33. * @return mixed
  34. * @throws \ReflectionException
  35. */
  36. public function dynamicInvokeClassWithArgsAndMethod(string $className, string $method, array $parameters = []): mixed
  37. {
  38. $reflection = new \ReflectionClass($className);
  39. $method = $reflection->getMethod($method);
  40. if($method->isStatic()){
  41. return $method->invoke(null, $parameters);
  42. }else{
  43. return $method->invoke($reflection, $parameters);
  44. }
  45. }
  46. }