Laravel中make方法用于什么,如何执行使用make方法
Admin 2022-06-15 群英技术资讯 588 次浏览
在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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
swoole客户端提供了TCP/UDP socket的客户端的封装代码,使用时仅需new Swoole\Client即可。除了普通的同步阻塞+select的使用方法外,Client还支持异步非阻塞回调。
本篇文章小编给大家分享一下python编写一个GUI倒计时器代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
php数组添加元素:1、array_push()函数将数组视为栈,将传入的变量压入数组的末尾,数组变量增加、长度增加。2、arr[]直接添加元素。3、array_fill()用给定的值填充数组。
本节主要介绍了 PHP 中 FTP 相关函数,讲解 php 如何操作 ftp 的连接、传输及文件与目录的相关操作的技巧。
在laravel中,“laravel mix”是一款前端任务自动化管理工具,mix提供了简洁流畅的API,能够为Laravel应用定义Webpack编译任务,mix支持许多CSS与JavaScript预处理器,通过调用可以管理前端资源。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008