【发布时间】:2010-09-27 11:09:32
【问题描述】:
我正在编写一个考虑到可测试性的 PHP 应用程序,因此我的类总是在它们的构造函数中询问它们所依赖的“协作对象”,就依赖注入模式而言。
这样,我就可以在我的单元测试中传递模拟或测试实现。
我想要实现的是能够实例化一个具有传递给其构造函数参数的空值的类,以触发一个回退机制,该机制为每个协作者实例化一个默认实现类。
因为在 PHP 中对象类型的参数不能被赋予默认值,所以我必须在构造函数中进行。以下代码是我目前使用的方法的一个示例:
class Engine
{
private $loader;
private $logger;
public function __construct(ResourceLoader $loader = null, Logger $logger = null)
{
if ($loader == null) $loader = new DefaultResourceLoader;
if ($logger == null) $logger = new DefaultLogger;
$this->loader = $loader;
$this->logger = $logger;
}
}
你怎么看这个?我应该改用 IoC 容器,还是有另一种方法可以为对象类型参数提供默认值?
【问题讨论】:
-
在这种情况下,您可以使用我的小型库 ValueResolver 使其更紧凑
标签: php unit-testing dependency-injection