/** * Gets a service call * * @param string $id * @param ehough_iconic_Reference $reference * * @return string */ private function getServiceCall($id, ehough_iconic_Reference $reference = null) { if ('service_container' === $id) { return '$this'; } if (null !== $reference && ehough_iconic_ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $reference->getInvalidBehavior()) { return sprintf('$this->get(\'%s\', ehough_iconic_ContainerInterface::NULL_ON_INVALID_REFERENCE)', $id); } else { if ($this->container->hasAlias($id)) { $id = (string) $this->container->getAlias($id); } return sprintf('$this->get(\'%s\')', $id); } }
/** * Gets the service call. * * @param string $id * @param ehough_iconic_Reference $reference * * @return string */ private function getServiceCall($id, ehough_iconic_Reference $reference = null) { if (null !== $reference && ehough_iconic_ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE !== $reference->getInvalidBehavior()) { return sprintf('@?%s', $id); } return sprintf('@%s', $id); }
/** * Validates the scope of a single ehough_iconic_Reference. * * @param ehough_iconic_Reference $reference * @param ehough_iconic_Definition $definition * * @throws ehough_iconic_exception_ScopeWideningInjectionException when the definition references a service of a narrower scope * @throws ehough_iconic_exception_ScopeCrossingInjectionException when the definition references a service of another scope hierarchy */ private function validateScope(ehough_iconic_Reference $reference, ehough_iconic_Definition $definition = null) { if (ehough_iconic_ContainerInterface::SCOPE_PROTOTYPE === $this->currentScope) { return; } if (!$reference->isStrict()) { return; } if (null === $definition) { return; } if ($this->currentScope === ($scope = $definition->getScope())) { return; } $id = (string) $reference; if (in_array($scope, $this->currentScopeChildren, true)) { throw new ehough_iconic_exception_ScopeWideningInjectionException($this->currentId, $this->currentScope, $id, $scope); } if (!in_array($scope, $this->currentScopeAncestors, true)) { throw new ehough_iconic_exception_ScopeCrossingInjectionException($this->currentId, $this->currentScope, $id, $scope); } }