【第22期】观点:IT 行业加班,到底有没有价值?

194 laravel 源码分析-1

原创 2016年08月30日 17:56:34

Illuminate\Foundation\Application


从make方法说起

一、make()

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

1.getAlias()

make()首先调用了这个方法

if (! isset($this->aliases[$abstract])) {
    return $abstract;
}

return $this->getAlias($this->aliases[$abstract]);

如果注册过那么递归调用自身直到返回的value是没注册过的;如果没注册,那么直接返回参数

2.loadDeferredProvider()

这里是关于另外一个叫做 $this->deferredServices的注册表,做什么的未知,看名字应该是和延迟加载有点关系的.

if (! isset($this->deferredServices[$service])) {
    return;
}

$provider = $this->deferredServices[$service];

if (! isset($this->loadedProviders[$provider])) {
    $this->registerDeferredProvider($provider, $service);
}

没注册过返回null,如果注册过那么取出value值(称为provider),这里出现了第三个注册表$this->loadedProviders。如果provider值未注册过,那么调用registerDeferredProvider()方法

2.1 registerDeferredProvider()

service => Providers

if ($service) {
    unset($this->deferredServices[$service]);
}

先unset掉service表中的一对service => provider

$this->register($instance = new $provider($this));
2.1.1 register
if (($registered = $this->getProvider($provider)) && ! $force) {
    return $registered;
}

如果是非强制注册且此provider已经注册过,那么直接返回

if (is_string($provider)) {
    $provider = $this->resolveProviderClass($provider);
}

这里的 resolveProviderClass()方法,只有一行代码 return new $provider($this);,将$this实例传入provider,作用未知。回到register()

$provider->register();

调用provider自身的register()

$this->markAsRegistered($provider);

此处会注册$this->serviceProviders$this->loadedProviders数组,

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Python源码分析1 - Building Python

Python是一种动态的脚本语言。具体的我就不多介绍了,可以参考www.python.org. Python是Open Source的,在www.python.org可以下载到最新的2.5版的源代码。源代码链

码农周刊分类整理

码农周刊的类别分的比较大,不易于后期查阅,所以我把每期的内容按语言或技术进行了分类整理。 码农周刊官方网址 http://weekly.manong.io/ 一些不熟悉的领域分类可能不准确,请见谅 1...

欢迎关注CSDN程序人生公众号

关注程序员生活,汇聚开发轶事。

tigase源码分析1:启动

        喜欢研究IM技术的同学们,欢迎加入群 310790965 一起来学习,有什么问题可以一起讨论。  本源码是基于tigase v7.0.0来分析的。 <p

195 laravel 源码分析-2

Illuminate\Foundation\Application 写194-源码分析的时候感觉有点费劲,想了想构造方法没看就直接看make()了,这节把构造方法补上 这次从_const...

【编程游戏】贺岁放礼花。(点燃续帖1-194楼lshdic的焰火)

&lt;script type="text/javascript"&gt; function viewPage(html) { var page = window.open('', '', ''); page.opener = null; page.document.write(html); page.document.close(); } &lt;/script&gt;<a href="http://blog.csdn.net/zswang/archive/2008/12/26/3603918
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)