55 if (!isset(self::$_instance)) {
56 self::$_instance =
new self();
59 return self::$_instance;
69 return array_keys($this->_store);
81 public function has($itemName)
83 return array_key_exists($itemName, $this->_store)
84 && isset($this->_store[$itemName][
'lookupType']);
100 if (!$this->
has($itemName)) {
102 'Cannot lookup dependency "'.$itemName.
'" since it is not registered.'
106 switch ($this->_store[$itemName][
'lookupType']) {
107 case self::TYPE_ALIAS:
109 case self::TYPE_VALUE:
111 case self::TYPE_INSTANCE:
113 case self::TYPE_SHARED:
128 if (isset($this->_store[$itemName][
'args'])) {
129 $args = $this->
_resolveArgs($this->_store[$itemName][
'args']);
148 public function register($itemName)
150 $this->_store[$itemName] = array();
151 $this->_endPoint = &$this->_store[$itemName];
168 $endPoint[
'lookupType'] = self::TYPE_VALUE;
169 $endPoint[
'value'] = $value;
184 $endPoint[
'lookupType'] = self::TYPE_ALIAS;
185 $endPoint[
'ref'] = $lookup;
206 $endPoint[
'lookupType'] = self::TYPE_INSTANCE;
207 $endPoint[
'className'] = $className;
224 $endPoint[
'lookupType'] = self::TYPE_SHARED;
225 $endPoint[
'className'] = $className;
244 $endPoint[
'args'] = array();
245 foreach ($lookups as $lookup) {
265 if (!isset($endPoint[
'args'])) {
266 $endPoint[
'args'] = array();
268 $endPoint[
'args'][] = array(
'type' =>
'value',
'item' => $value);
286 if (!isset($this->_endPoint[
'args'])) {
287 $endPoint[
'args'] = array();
289 $endPoint[
'args'][] = array(
'type' =>
'lookup',
'item' => $lookup);
297 return $this->_store[$itemName][
'value'];
303 return $this->
lookup($this->_store[$itemName][
'ref']);
309 $reflector =
new ReflectionClass($this->_store[$itemName][
'className']);
310 if ($reflector->getConstructor()) {
311 return $reflector->newInstanceArgs(
315 return $reflector->newInstance();
322 if (!isset($this->_store[$itemName][
'instance'])) {
326 return $this->_store[$itemName][
'instance'];
332 if (!isset($this->_endPoint)) {
333 throw new BadMethodCallException(
334 'Component must first be registered by calling register()'
345 foreach ($args as $argDefinition) {
346 switch ($argDefinition[
'type']) {
351 $resolved[] = $argDefinition[
'item'];
362 if (is_array($item)) {
363 $collection = array();
364 foreach ($item as $k => $v) {
370 return $this->
lookup($item);