千家信息网

laravel中的make方法有什么作用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"laravel中的make方法有什么作用",内容详细,步骤清晰,细节处理妥当,希望这篇"laravel中的make方法有什么作用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
千家信息网最后更新 2026年11月01日laravel中的make方法有什么作用

本文小编为大家详细介绍"laravel中的make方法有什么作用",内容详细,步骤清晰,细节处理妥当,希望这篇"laravel中的make方法有什么作用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在laravel中,make方法用于从容器当中解析一个type,该type是源码当中定义的,解析后返回的结果就是type的一个实例,容器类调用make方法时,若没有已注册的key,会自动通过反射类实例化具体类。

本文操作环境:Windows10系统、Laravel6版、Dell G3电脑。

laravel中make方法的作用是什么

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方法 }

读到这里,这篇"laravel中的make方法有什么作用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

方法 作用 就是 容器 数组 实例 文章 源码 类名 结果 接下来 内容 别名 时候 篇文章 妥当 巧妙 两个 代码 作者 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会副主任毛军 金融科技还是互联网 重庆互联网络科技 合肥互联网科技公司 美国互联网黑科技 有木互联网科技 互联网科技热点资讯 互联网金融中的现代科技 互联网与医疗科技 企晟互联网信息科技有限公司 朱啸虎曾投资哪些互联网科技企业 中国互联网有什么科技 江苏苏星互联网科技有限公司 杭州披云加互联网科技有限公司 本届互联网大会上的黑科技 广州燕处互联网科技有限公司 互联网科技博主张洲 保山浩联互联网科技有限公司 重庆科技产业互联网有哪些 互联网科技快速发展优美句子 科技互联网技术 互联网 科技公司 壕鑫互联网络科技 天津腾达互联网科技有限公司 互联网公司高科技产品 上海钢联属于互联网科技股吗 下一代互联网重大应用科技园 工业互联网科技创业 互联网科技企业商标注意事项 北京互联网科技类企业分布
0