/**
* Register a new resolving callback by type of its first argument.
*
* @param \Closure $callback
* @return void
*/
// Register a new resolving callback by type of its first argument
protected function resolvingCallback(Closure $callback)
{
$abstract = $this->getFunctionHint($callback);// get the abstract function
if ($abstract) {// if get the abstract function set in
$this->resolvingCallbacks[$abstract][] = $callback;// one is abstract function
} else {
$this->globalResolvingCallbacks[] = $callback;// other set in the global Resolving Call backs
}
}
/**
* Register a new after resolving callback by type of its first argument.
*
* @param \Closure $callback
* @return void
*/
protected function afterResolvingCallback(Closure $callback)
{
$abstract = $this->getFunctionHint($callback);// get the result
if ($abstract) {
$this->afterResolvingCallbacks[$abstract][] = $callback;// one is in the abstract
} else {
$this->globalAfterResolvingCallbacks[] = $callback;
}
}
/**
* Get the type hint for this closure's first argument.
*
* @param \Closure $callback
* @return mixed
*/
// hint is type or a way
protected function getFunctionHint(Closure $callback)
{
$function = new ReflectionFunction($callback);// get the new Reflection Function
if ($function->getNumberOfParameters() == 0) {
return;
}// if $function
$expected = $function->getParameters()[0];
if (! $expected->getClass()) {// getClass
return;
}
return $expected->getClass()->name;// get the class name.
}
// sorry ,this too easy
每天laravel-20160817| Container -20
最新推荐文章于 2018-03-19 21:41:31 发布