/** * @param ServiceProviderInterface $provider * @return string[] * @throws OverflowException * @throws ResourceUndefinedException */ private function orderProvider(ServiceProviderInterface $provider) { $localOrder = []; $requires = $provider->getRequires(); $provides = $provider->getProvides(); if (!empty($provides)) { foreach ($provides as $resource) { $localOrder = array_merge($localOrder, $this->orderResource($resource)); } } else { foreach ($requires as $resource) { $localOrder = array_merge($localOrder, $this->orderResource($resource)); } $localOrder[] = get_class($provider); } return $localOrder; }