createInstance($className, $params); $formatter = $this->loadFormatter($data); if ($formatter) { $handler->setFormatter($formatter); } return $handler; } protected function loadFormatter(array $data): ?FormatterInterface { $formatterData = $data['formatter'] ?? null; if (!$formatterData || !is_array($formatterData)) { return null; } $className = $formatterData['className'] ?? null; if (!$className) { return null; } $params = $formatterData['params'] ?? []; return $this->createInstance($className, $params); } protected function createInstance(string $className, array $params): object { $class = new ReflectionClass($className); $constructor = $class->getConstructor(); $argumentList = []; foreach ($constructor->getParameters() as $parameter) { $name = $parameter->getName(); if (array_key_exists($name, $params)) { $value = $params[$name]; } else if ($parameter->isDefaultValueAvailable()) { $value = $parameter->getDefaultValue(); } else { continue; } $argumentList[] = $value; } return $class->newInstanceArgs($argumentList); } }