Laravel中make方法用于什么,如何执行使用make方法
Admin 2022-06-15 群英技术资讯 1143 次浏览
这篇文章主要讲解了“Laravel中make方法用于什么,如何执行使用make方法”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。在laravel中,make方法用于从容器当中解析一个type,该type是源码当中定义的,解析后返回的结果就是type的一个实例,容器类调用make方法时,若没有已注册的key,会自动通过反射类实例化具体类。

本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。
Laravel中的make方法是用来从容器当中解析一个type,这个type是源码当中定义的,不是很好翻译成中文。解析后返回的结果就是type的一个实例。
看过源码的同学应该知道在Illuminate\Foundation\Application这个类和它的父类Illuminate\Container\Container类中都有make方法,那么当执行如index.php中的这行代码,
1 $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
的时候,就会首先去执行Illuminate\Foundation\Application中的make方法,那么我们就先看看它。(这篇文章就以make这个Kernel类为例)
/**
* Resolve the given type from the container. 从容器当中解析给定的type
*
* (Overriding Container::make) 覆盖了父类中的make方法
*
* @param string $abstract 给定的type
* @param array $parameters 指定一些参数 可选项
* @return mixed
*/
public function make($abstract, array $parameters = [])
{
$abstract = $this->getAlias($abstract);//调用父类中的getAlias方法
//如果在deferredServices这个数组设置了这个type并且在instances数组中没有设置这个type
if (isset($this->deferredServices[$abstract]) && ! isset($this->instances[$abstract])) {
$this->loadDeferredProvider($abstract);//那么就执行这个方法:加载被定义为延迟的服务提供者
}
return parent::make($abstract, $parameters);//调用父类的make方法
}好,我们一步一步的来,先看看这个getAlias方法,这个方法的作用就是返回这个类的别名,如果给出的是一个完整的类名且在aliases中已经设置了那么就返回这个类名的别名,如果没有设置过就返回这个类名本身,大家在看这个方法的时候可以先var_dump一下$app,对照着看里面的aliases数组,框架作者写这个方法真的很巧妙,至少这种递归方式在我实际开发当中很少用到。
/**
* Get the alias for an abstract if available.
*
* @param string $abstract
* @return string
*
* @throws \LogicException
*/
public function getAlias($abstract)
{
if (! isset($this->aliases[$abstract])) {
return $abstract;
}
if ($this->aliases[$abstract] === $abstract) {
throw new LogicException("[{$abstract}] is aliased to itself.");
}
return $this->getAlias($this->aliases[$abstract]);
}接下来就是对deferredServices和instances这个两个数组进行判断,在本例 $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); 当中,判断的结果为false,因此不执行loadDeferredProvider方法。
再接下来就是调用父类Illuminate\Container\Container中的make方法了,
/**
* Resolve the given type from the container.
*
* @param string $abstract
* @param array $parameters
* @return mixed
*/
public function make($abstract, array $parameters = [])
{
return $this->resolve($abstract, $parameters);//直接调用resolve方法
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
php变量中的两种复合类型:1、数组(array),数组可以存储多个数据,可以是任何类型。2、对象(object),对象是一种比数组更先进的复合数据类型。
这篇文章给大家分享的是有关TP5框架页面跳转样式的内容,能应用于操作成功或者操作失败跳转,小编觉得挺实用的,因此分享给大家做个参考,感兴趣的朋友可以参考一下。
我们在开发中常会需要程序定时的执行一些操作,这时写一个简洁高效的定时器就非常有必要,关于定时器本文将给大家详细的介绍,对大家的学习或工作具有一定的参考借鉴价值
本篇文章小编给大家分享一下Python交互Redis代码实现方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
php命令行中进行断点:1、除了在 PHP 代码中给出固定的断点之外,我们还可以在命令行中进行断点的增加。2、去掉之前的方法断点函数。然后在命令行中指定在方法中增加一个断点。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008