Last active
July 28, 2016 08:37
-
-
Save howtomakeaturn/42095d6cb2c26cb50f53e527cd08a122 to your computer and use it in GitHub Desktop.
demo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Resolve the given type from the container. | |
* | |
* @param string $abstract | |
* @param array $parameters | |
* @return mixed | |
*/ | |
public function make($abstract, array $parameters = []) | |
{ | |
$abstract = $this->getAlias($abstract); | |
// If an instance of the type is currently being managed as a singleton we'll | |
// just return an existing instance instead of instantiating new instances | |
// so the developer can keep using the same objects instance every time. | |
if (isset($this->instances[$abstract])) { | |
return $this->instances[$abstract]; | |
} | |
$concrete = $this->getConcrete($abstract); | |
// We're ready to instantiate an instance of the concrete type registered for | |
// the binding. This will instantiate the types, as well as resolve any of | |
// its "nested" dependencies recursively until all have gotten resolved. | |
if ($this->isBuildable($concrete, $abstract)) { | |
$object = $this->build($concrete, $parameters); | |
} else { | |
$object = $this->make($concrete, $parameters); | |
} | |
// If we defined any extenders for this type, we'll need to spin through them | |
// and apply them to the object being built. This allows for the extension | |
// of services, such as changing configuration or decorating the object. | |
foreach ($this->getExtenders($abstract) as $extender) { | |
$object = $extender($object, $this); | |
} | |
// If the requested type is registered as a singleton we'll want to cache off | |
// the instances in "memory" so we can return it later without creating an | |
// entirely new instance of an object on each subsequent request for it. | |
if ($this->isShared($abstract)) { | |
$this->instances[$abstract] = $object; | |
} | |
$this->fireResolvingCallbacks($abstract, $object); | |
$this->resolved[$abstract] = true; | |
return $object; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment