服务方法调用和Setter注入
编辑本页服务方法调用和Setter注入
提示
如果你正在使用自动装配,你可以使用#[要求]
来自动配置方法调用.
通常,您希望通过构造函数注入依赖项。但有时,特别是如果依赖项是可选的,你可能想要使用“setter注入”。例如:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/ / src /服务/ MessageGenerator.php名称空间应用程序\服务;使用Psr\日志\LoggerInterface;类MessageGenerator{私人$日志记录器;公共函数setLogger(LoggerInterface$日志记录器):无效{$这->记录器=$日志记录器;}/ /……}
将容器配置为调用setLogger
方法,使用调用
关键:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/ services.yaml服务:应用程序服务\ \ MessageGenerator:#……电话:-setLogger:(“@logger”)
为了提供不可变服务,一些类实现了不可变setter。这样的setter返回已配置类的一个新实例,而不是改变被调用的对象:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src /服务/ MessageGenerator.php名称空间应用程序\服务;使用Psr\日志\LoggerInterface;类MessageGenerator{私人$日志记录器;公共函数withLogger(LoggerInterface$日志记录器):自我{$新=克隆$这;$新->记录器=$日志记录器;返回$新;}/ /……}
因为该方法返回一个单独的克隆实例,所以配置这样的服务意味着使用wither方法的返回值($service = $service->withLogger($logger);
).告诉容器应该这样做的配置是这样的:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/ services.yaml服务:应用程序服务\ \ MessageGenerator:#……电话:-withLogger:returns_clone !(“@logger”)
提示
如果启用了自动连接,您还可以使用属性;对于前面的例子,它将是:
1 2 3 4 5 6 7 8 9 10 11
/ * * *@return静态* /#[要求]公共函数withLogger(LoggerInterface$日志记录器){$新=克隆$这;$新->记录器=$日志记录器;返回$新;}
您还可以利用PHP 8静态
返回类型,而不是@return静态
注释。如果你不想要PHP 8的方法静态
返回类型和#[要求]
属性要表现为凋零,可以再加一个@return美元这
注释来禁用返回克隆特性。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。