e change, we need to check // type before processing next group. if ($resultType === self::SERVICE_TYPE_CHANGED && !is_a($service, $type)) { continue; } /** @var object $service */ [$service, $resultType] = $this->extendByType($type, $service, $container, $extenders); if ($resultType === self::SERVICE_TYPE_NOT_OBJECT) { // Service is not an object anymore, let's return it. return $service; } } // If type changed since beginning, let's start over. // We check if class was already extended to avoid infinite recursion. E.g. instead of: // `-> extend(A): B -> extend(B): A -> *loop* ->` // we have: // `-> extend(A): B -> extend(B): A -> return A`. $newClassName = get_class($service); if (!in_array($newClassName, $extendedClasses, \true)) { return $this->resolveByType($newClassName, $service, $container, $extendedClasses); } return $service; } /** * @param class-string $type * @param object $service * @param Container $container * @param list $extenders * * @return list{mixed, int} */ private function extendByType(string $type, object $service, Container $container, array $extenders): array { foreach ($extenders as $extender) { $service = $extender($service, $container); if (!is_object($service)) { return [$service, self::SERVICE_TYPE_NOT_OBJECT]; } if (!is_a($service, $type)) { return [$service, self::SERVICE_TYPE_CHANGED]; } } return [$service, self::SERVICE_TYPE_NOT_CHANGED]; } } WordPress › fout
Deze website is gearchiveerd of buiten werking gesteld.