大家知道这个实例化是怎么形成的?

 $faker = app(Faker\Generator::class);

app这个关键词在这里是个什么作用?能实例化这个类吗?
我所了解的实例化都是这个形式的
$instance = new classname;
不知道这个形式是怎么来的,谢谢大家。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

这个说起来有点长。

 function app($abstract = null, array $parameters = [])
    {
        if (is_null($abstract)) {
            return Container::getInstance();
        }

        return Container::getInstance()->make($abstract, $parameters);
    }

其实就相当于执行 Container::getInstance()->make(Faker\Generator::class);
然后就是调用 Container 中的 resolve,再调用 build, 最后返回了一个实例。

最后还是建议去了解一下容器吧

6年前 评论
讨论数量: 3

这个说起来有点长。

 function app($abstract = null, array $parameters = [])
    {
        if (is_null($abstract)) {
            return Container::getInstance();
        }

        return Container::getInstance()->make($abstract, $parameters);
    }

其实就相当于执行 Container::getInstance()->make(Faker\Generator::class);
然后就是调用 Container 中的 resolve,再调用 build, 最后返回了一个实例。

最后还是建议去了解一下容器吧

6年前 评论

首先要了解 Laravel 框架是一个容器框架,框架应用程序的实例就是一个超大的容器,这个实例在 bootstrap/app.php内进行初始化,在 app.php 中你可以看到还是用的 new 方法进行实例化。app() 等一系列辅助函数定义在 vendor/laravel/framework/src/illuminate/Foundation/helpers.php 中,可以看看它是如何定义的。

6年前 评论
luckwang
# 这样 providers 是空的
>>> $faker=new Faker\Generator();
=> Faker\Generator {#3048}
>>> dd($faker);
Faker\Generator {#3048
  #providers: []
  #formatters: []
}

# 这样会自己添加 providers
>>> $faker=app(Faker\Generator::class);
=> Faker\Generator {#3058}
>>> dd($faker);
Faker\Generator {#3058
  #providers: array:20 [
    0 => Faker\Provider\Uuid {#3069
      #generator: Faker\Generator {#3058}
      #unique: null
....

app 辅助函数实例化还是很不一样的,app 源码里也没看太出来啊.....

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!