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

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

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

这个说起来有点长。

 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, 最后返回了一个实例。

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

5年前 评论
讨论数量: 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, 最后返回了一个实例。

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

5年前 评论

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

5年前 评论
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年前 评论

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