laravel5.5 php,Laravel 5.5) 加载过程instance方法

在bootstrap/app.php

/**

* 对于其中的instance register singleton 方法到时候单独拎出来说明

*

* 1.设置基础路径

* 2.使用instance 方法 绑定app 和Illuminate\Foundation\Application类的关系

* 3.使用instance 方法 绑定Container 和Illuminate\Foundation\Application类的关系

* 4.app变量中注册事件服务EventServiceProvider

* 5.app变量中注册日志服务LogServiceProvider

* 6.app变量中注册路由服务RoutingServiceProvider

* 7.别名的注册(vendor/laravel/framework/src/Illuminate/Foundation/Application.php文件中的 registerCoreContainerAliases 方法) */$app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../')

);

实例化 vendor/laravel/framework/src/Illuminate/Foundation/Application.php类 该类的魔术方法

public function __construct($basePath = null)

{ /**

* 如果有传地址 设置基础路径 设置

* path $this->path()

* path.base $this->basePath()

* path.lang $this->langPath()

* path.config $this->configPath()

* path.public $this->publicPath()

* path.storage $this->storagePath()

* path.database $this->databasePath()

* path.resources $this->resourcePath()

* path.bootstrap $this->bootstrapPath() */

if ($basePath) { $this->setBasePath($basePath);

} /**

* 注册 app 和container到 instances数组中 */

$this->registerBaseBindings(); /**

* 注册EventServiceProvider LogServiceProvider RoutingServiceProvider */

$this->registerBaseServiceProviders(); /**

* 设置核心类的别名 */

$this->registerCoreContainerAliases();

}

查看注册 app 和container到 instances数组中

protected function registerBaseBindings()

{ static::setInstance($this); /**

* 由于初始化中 app没有添加到instances数组中 所以 不会执行build函数 只做了 instances数组中记录了app和$this */

$this->instance('app', $this); /**

* 由于初始化中 Container没有添加到instances数组中 所以 不会执行build函数 只做了 instances数组中记录了app和$this */

$this->instance(Container::class, $this);

}

查看今天主要的方法 instance

流程图

ed165ea896c291b628f03b33c46b67a7.png

public function instance($abstract, $instance)

{ /**

* 如果aliases 数组总存在 则游离abstractAliases 数组 删除其中的存在的值 */

$this->removeAbstractAlias($abstract); /**

* 判断 在bindings aliases instances其中有一个存现 则返回true */

$isBound = $this->bound($abstract); /**

* 删除别名数组中对于的建 */

unset($this->aliases[$abstract]); // We'll check to determine if this type has been bound before, and if it has

// we will fire the rebound callbacks registered with the container and it

// can be updated with consuming classes that have gotten resolved here.

/**

* 在instances 数组中添加对于的建 */

$this->instances[$abstract] = $instance; /**

* 如果之前存在实例化 则运行 */

if ($isBound) { $this->rebound($abstract);

}

}

第一个方法 removeAbstractAlias

/**

* Remove an alias from the contextual binding alias cache.

*

* @param string $searched

* @return void */

protected function removeAbstractAlias($searched)

{ /**

* 如果在别名数组中不存在则直接返回 */

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

} /**

* 游离抽象别名 吧存在抽象类别名数组中的存在的删除

* @example abstractAliases = ['nameabstract'=>['aliase1','aliases2']] */

foreach ($this->abstractAliases as $abstract => $aliases) { foreach ($aliases as $index => $alias) { if ($alias == $searched) { unset($this->abstractAliases[$abstract][$index]);

}

}

}

}

第二个方法: bound

/**

* Determine if the given abstract type has been bound.

*

* @param string $abstract

* @return bool */

public function bound($abstract)

{ return isset($this->bindings[$abstract]) || isset($this->instances[$abstract]) || $this->isAlias($abstract);

}

第三个方法: rebound

/**

* Fire the "rebound" callbacks for the given abstract type.

*

* @param string $abstract

* @return void */

protected function rebound($abstract)

{ /**

* 主要实现的功能为 build 方法 实例化制定的类 并且返回该类

*/

$instance = $this->make($abstract); /**

* 查看reboundCallbacks 数组中是否存在该别名创建完成之后需要调用的方法数组

* 存在返回需要调用的方法数组 并且逐个执行 */

foreach ($this->getReboundCallbacks($abstract) as $callback) { call_user_func($callback, $this, $instance);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel 5.5的Eloquent是一个强大的ORM(对象关系映射)工具,可以帮助开发者在数据库中进行数据操作。Eloquent使用PHP语言中的简单易懂的语法,来实现对数据库表的查询、插入、更新和删除等操作。 Eloquent提供了多种方法,用于执行各种类型的数据库查询。比如,通过`all()`方法可以获取表中的所有记录,`find()`方法可以根据给定的主键值来获取单条记录。同时,Eloquent还支持链式调用多个方法,以便实现更复杂的查询逻辑。 在Eloquent中,开发者还可以借助模型来定义数据表之间的关联关系。通过在模型中定义关联关系的方法,可以方便地进行关联表的查询,并且可以使用`with()`方法来预加载关联表的数据,从而减少数据库查询的次数,提升查询性能。 除了查询操作,Eloquent还提供了简单易用的数据插入和更新方法。开发者可以通过`create()`方法创建新的数据记录,也可以通过`update()`方法来更新已有的数据记录。同时,Eloquent还支持批量赋值、批量更新等高效的数据操作方式。 总的来说,Laravel 5.5的Eloquent文档中提供了全面而丰富的API,能够让开发者轻松地进行数据库操作。通过阅读Eloquent文档,开发者可以更好地理解如何使用该工具来提高开发效率,并且能够更好地利用其丰富的特性,来满足不同的开发需求。 Eloquent 是 Laravel 的 ORM 实现,使得数据库操作更加方便。 Eloquent 可以像访问属性一样访问模型,从而在数据库中实现数据的增、删、改、查等操作。里面包括了很多常用的数据库操作方法,如查询构造器,同特点,关联模型等等。 所以学习Eloquent 文档有助于熟练使用正事这一工具,提高代码的质量和开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值