使用 App::environment() vs app()->environment() vs config('app.env') 的区别
Difference between using App::environment() vs app()->environment() vs config('app.env')
使用 App::environment()
、app()->environment()
和 config('app.env')
检查环境有什么区别?我假设前两个是完全相同的东西,但是那些与使用 config('app.env')
?
相比呢?
我可以看到前两个 returns 整个服务容器实例,所以性能更差,但更安全还是什么?我读到人们建议只对您自己的配置变量和任何其他不是 env 的配置变量使用 config()
。试图找出原因。
谢谢!
App::环境()
使用Facade获取环境,Illuminate\Foundation\Application
.
的facade
app()
使用辅助函数 return \Illuminate\Container\Container::getInstance()
。 environment()
在此 Container 实例的方法中。
解决()
是 app()
的别名,但需要一个参数,例如resolve('config')
或 resolve(Application::class)
.
app()->make(Application::class)
使用容器来解析应用程序。这等于 app(Application::class)
.
Config::get('app.env')
使用 \Illuminate\Config\Repository
.
的外观
配置('app.env')
使用辅助函数调用 app()
来解析配置。当您在位于 config/
.
的配置文件中工作时,您应该 仅 使用 env()
public 函数 __construct(配置 $config)
使用依赖注入来解析配置。
回答
引导应用程序时,the config variables are loaded在此应用程序中使用配置。
所以Container使用Config来加载变量。两者都是单例,所以调用它们并不会真正影响性能。
您选择哪种解决方案有时取决于 use-case,主要取决于偏好。
App::environment()
和 app()->environment()
是一回事。 App
外观和 app()
辅助函数都只是访问应用程序容器的快捷方式。
在网络上下文中(从浏览器访问您的页面),App::environment()
方法和 config('app.env')
函数将 return 相同的值。
在 cli 上下文中(artisan 命令、排队作业等),App::environment()
方法和 config('app.env')
函数可以 return 不同的值。如果使用 --env
参数(例如:--env=testing
)执行 运行 命令,则 App::environment()
方法将 return 实际检测到的环境(“测试"),而 config('app.env')
函数将继续 return 您的配置文件中定义的环境。
另外两件事需要考虑:
environment()
方法是 public api 的一部分。这意味着唯一可能发生重大变化的是主要版本。 app.env
配置值不是 public api 的一部分。 Laravel 如果他们愿意,可以随时更改它,即使是在次要版本上。我怀疑他们会不会,但他们没有做出 public 承诺。
environment()
方法采用可选参数来添加一点语法糖来测试您当前的环境。如果您传递参数,如果您处于任何提供的环境中,该方法将 return 一个布尔值,而不是 return 一个包含当前环境名称的字符串。参数也被视为正则表达式搜索:
$isTesting = App::environment('test', 'testing', 'testarossa')
// or
$isTesting = App::environment('test*')
(正则表达式前的“*”替换为“.*”)运行)
使用 App::environment()
、app()->environment()
和 config('app.env')
检查环境有什么区别?我假设前两个是完全相同的东西,但是那些与使用 config('app.env')
?
我可以看到前两个 returns 整个服务容器实例,所以性能更差,但更安全还是什么?我读到人们建议只对您自己的配置变量和任何其他不是 env 的配置变量使用 config()
。试图找出原因。
谢谢!
App::环境()
使用Facade获取环境,Illuminate\Foundation\Application
.
app()
使用辅助函数 return \Illuminate\Container\Container::getInstance()
。 environment()
在此 Container 实例的方法中。
解决()
是 app()
的别名,但需要一个参数,例如resolve('config')
或 resolve(Application::class)
.
app()->make(Application::class)
使用容器来解析应用程序。这等于 app(Application::class)
.
Config::get('app.env')
使用 \Illuminate\Config\Repository
.
配置('app.env')
使用辅助函数调用 app()
来解析配置。当您在位于 config/
.
env()
public 函数 __construct(配置 $config)
使用依赖注入来解析配置。
回答
引导应用程序时,the config variables are loaded在此应用程序中使用配置。
所以Container使用Config来加载变量。两者都是单例,所以调用它们并不会真正影响性能。
您选择哪种解决方案有时取决于 use-case,主要取决于偏好。
App::environment()
和 app()->environment()
是一回事。 App
外观和 app()
辅助函数都只是访问应用程序容器的快捷方式。
在网络上下文中(从浏览器访问您的页面),App::environment()
方法和 config('app.env')
函数将 return 相同的值。
在 cli 上下文中(artisan 命令、排队作业等),App::environment()
方法和 config('app.env')
函数可以 return 不同的值。如果使用 --env
参数(例如:--env=testing
)执行 运行 命令,则 App::environment()
方法将 return 实际检测到的环境(“测试"),而 config('app.env')
函数将继续 return 您的配置文件中定义的环境。
另外两件事需要考虑:
environment()
方法是 public api 的一部分。这意味着唯一可能发生重大变化的是主要版本。app.env
配置值不是 public api 的一部分。 Laravel 如果他们愿意,可以随时更改它,即使是在次要版本上。我怀疑他们会不会,但他们没有做出 public 承诺。environment()
方法采用可选参数来添加一点语法糖来测试您当前的环境。如果您传递参数,如果您处于任何提供的环境中,该方法将 return 一个布尔值,而不是 return 一个包含当前环境名称的字符串。参数也被视为正则表达式搜索:$isTesting = App::environment('test', 'testing', 'testarossa') // or $isTesting = App::environment('test*')
(正则表达式前的“*”替换为“.*”)运行)