最佳答案
这个说起来有点长。
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
, 最后返回了一个实例。
最后还是建议去了解一下容器吧
讨论数量:
这个说起来有点长。
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
, 最后返回了一个实例。
最后还是建议去了解一下容器吧
首先要了解 Laravel 框架是一个容器框架,框架应用程序的实例就是一个超大的容器,这个实例在 bootstrap/app.php
内进行初始化,在 app.php 中你可以看到还是用的 new
方法进行实例化。app()
等一系列辅助函数定义在 vendor/laravel/framework/src/illuminate/Foundation/helpers.php
中,可以看看它是如何定义的。
# 这样 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 源码里也没看太出来啊.....
推荐文章: