[laravel源码]Application/register解析流程

说明

本章节说明容器中 register 的解析过程。

源码

vendor\laravel\framework\src\Illuminate\Foundation\Application.php

public function register($provider, $force = false)
{
    // 1. 容器中是否已注册,已注册直接返回,否则继续往下
    if (($registered = $this->getProvider($provider)) && ! $force) {
        return $registered;
    }
    if (is_string($provider)) {
        $provider = $this->resolveProvider($provider);
    }

    // 2. 执行 register
    if (method_exists($provider, 'register')) {
        $provider->register();
    }

    // 3. 如果具备 bindings/singleton 属性,则进入 bind/singleton 流程
    // singleton() 内调用 bind($k,$v,true),区别在于第三个参数
    if (property_exists($provider, 'bindings')) {
        foreach ($provider->bindings as $key => $value) {
            $this->bind($key, $value);
        }
    }
    if (property_exists($provider, 'singletons')) {
        foreach ($provider->singletons as $key => $value) {
            $this->singleton($key, $value);
        }
    }

    // 4. 标记
    $this->markAsRegistered($provider);

    // 5. 已boot,则调用boot
    if ($this->booted) {
        $this->bootProvider($provider);
    }

    return $provider;
}

分析

  1. register与boot的先后顺序
  2. boot只有容器booted为真时才调用
本作品采用《CC 协议》,转载必须注明作者和本文链接
城里的野山参
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
69
粉丝
10
喜欢
30
收藏
41
排名:571
访问:1.4 万
私信
所有博文
社区赞助商