gpt4 book ai didi

php - IoC 容器和全局变量

转载 作者:行者123 更新时间:2023-12-02 17:36:51 24 4
gpt4 key购买 nike

我看到很多人建议不要使用global variable/singleton/static class 并转而使用 iOC 容器,例如,在 PHP larvel 框架中,它是 p>

App::bind('foo', function($app)
{
return new FooBar;
});

$value = App::make('foo');

代替

$value = new FooBar;

但对我来说,App::bind 本身是一个静态方法,无法轻易替换。

所以,我可以说,iOC(至少在 PHP 中)只是删除了硬编码变量的数量并最小化为 one,这是服务定位器,它不能进一步减少了,对吧?

最佳答案

App::bind 不是静态方法,这是它的签名:

public function bind($abstract, $concrete = null, $shared = false)

(在 /vendor/laravel/framework/src/Illuminate/Container/Container.php 中找到)

Laravel 使用 Facades ,虽然它们看起来像是在静态调用方法,但实际上在引擎盖下实例化了一个对象,然后对该对象调用了一个实例方法。虽然 Laravel 确实在其模型中使用了一些静态方法,但 App 对象本身实际上是一个外观。如果您查看 /vendor/laravel/framework/src/Illuminate/Support/Facades/,您可以看到内置外观的列表。

关于php - IoC 容器和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com