/** * @param string $id * @return mixed * @throws CircularDependencyException */ private function createService($id) { if (isset($this->servicesCreating[$id])) { $msg = 'Circular dependency: ' . implode(' => ', array_keys($this->servicesCreating)) . " => {$id}"; throw new CircularDependencyException($msg); } $this->servicesCreating[$id] = true; $service = $this->factory->create($id, $this); unset($this->servicesCreating[$id]); $this->repository->add($id, $service); return $service; }
/** * Gets the instance via lazy initialization (created on first usage) * * @param $id * * @throws CircularDependencyException * * @return a registered service */ public function get($id) { $service = $this->repository->get($id); if (is_null($service)) { if (isset($this->servicesCreating[$id])) { $msg = 'Circular dependency detected: ' . implode(' => ', array_keys($this->servicesCreating)) . " => {$id}"; throw new CircularDependencyException($msg); } // remmember ids called $this->servicesCreating[$id] = true; // pass the container to force only one instantiation per class $service = $this->factory->create($id, $this); unset($this->servicesCreating[$id]); $this->repository->add($id, $service); } return $service; }