我通常使用这样的参数:
public function test($parameter)
{
echo 'Parameter value: ' . $parameter;
}
看着laravel service container时,我看到了这段代码。
public function __construct(UserRepository $users)
{
$this->users = $users;
}
根据文档,它使用反射。但是我不明白。
我不知道参数UserRepository $users
的工作方式。那是别名还是什么?
答案 0 :(得分:2)
这称为类型提示,用于在构造函数中注入依赖项或验证将正确的参数类型传递给函数。注入只是意味着,如果使用make
方法调用该类,Laravel将自动提供构造函数所需的类的实例。
例如,如果您有一个函数public function something(string $something)
,并且将String
以外的任何其他类型传递给该函数,则会确保输入正确的数据。
从laravel文档中:
或者,重要的是,您可以“暗示”由容器解析的类的构造函数中的依赖关系,包括控制器,事件侦听器,队列作业,中间件等。实际上,这就是容器应解决的大多数对象的方式。
例如,您可以在控制器的构造函数中键入由应用程序定义的存储库的提示。存储库将自动解析并注入到类中:
答案 1 :(得分:0)
Laravel具有出色的服务容器,它可以进行所有依赖项注入,因此您无需将参数传递给类,而laravel可以为您完成。
没有容器,您必须传递此参数
class A {
public $foo;
public function __construct (Foo $foo){
$this->foo
}
$classA = new A((new Foo))
当laravel遇到这些类时,它会resolves
。
您还可以使用singleton()
或bind()
方法手动定义这些类
$this->app->singleton('FooBar', function($app)
{
return new FooBar($app['SomethingElse']);
});
或者您可以使用界面。您可以将实现的类绑定到接口和laravel,当遇到这种干扰时,它将按您希望的方式解决
$this->app->bind('App\ICacheManager', 'App\RedisManager');
public $redis;
public function __contruct(ICacheManager $redis){
$this->redis = $redis;
}
有关更多详情,请查看laravel service container