gpt4 book ai didi

php - Laravel 5 - 如何使用 $this->app->when()

转载 作者:行者123 更新时间:2023-12-04 02:56:48 26 4
gpt4 key购买 nike

阅读 laravel bindings ,我明白了$this->app->bind , $this->app->singleton$this->app->instance因为它们几乎相同。

但是$this->app->when对我来说有点棘手。

在 laravel 示例中

$this->app->when('App\Http\Controllers\UserController')
->needs('$variableName')
->give($value);

据我了解,它注入(inject)了一些原始值和 App\Http\Controllers\UserController是要绑定(bind)的对象的别名。但是对象在哪里呢?

谁能解释一下?感谢您的帮助。

最佳答案

上下文绑定(bind)不适用于变量名,但适用于类型。它用于根据上下文为使用类或函数的接口(interface)提供不同的实现。事实上,您实际上可以阅读方法调用,并且它完全符合您的预期。为了详细说明这一点,我将以文档为例并稍作修改:

$this->app->when(Worker::class)
->needs(Money::class)
->give(function () {
return new Dollar();
});

$this->app->when(Boss::class)
->needs(Money::class)
->give(function () {
return new Cheque();
});

在本例中, Money是一个接口(interface)和 Cents以及 Cheque是接口(interface)的实现。这个例子的字面意思是,如果你输入 MoneyWorker类,它将解析为 Dollar 的实例虽然它将解析为 ChequeBoss类(class)。为了说明,这里的实现和结果:
interface Money
{
public function getAmount();
}

class Dollar implements Money
{
public function getAmount()
{
return 1;
}
}

class Cheque implements Money
{
public function getAmount()
{
return 100000;
}
}

现在我们输入 Money界面看看我们会得到什么:
class Worker
{
public function __construct(Money $money)
{
echo $money->getAmount(); // prints '1'
}
}

class Boss
{
public function __construct(Money $money)
{
echo $money->getAmount(); // prints '100000'
}
}

关于php - Laravel 5 - 如何使用 $this->app->when(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52777570/

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