Php 如何从Symfony控制台应用程序中的类登录
在阅读文档和示例时,我发现Php 如何从Symfony控制台应用程序中的类登录,php,symfony,symfony-console,Php,Symfony,Symfony Console,在阅读文档和示例时,我发现LoggerInterface通过依赖项As的构造函数传递,这允许依赖项输出到控制台 我的问题是: 如果我有多个类,我应该在构造函数中传递LoggerInterface,还是有更好的实践?或者我甚至不应该把它传给这些班级 如果我想让一个类在没有LoggerInterface的情况下工作,我是否总是检查$this->logger是否为null,然后采取相应的行动 比如说, class ObjectOne { /** * @var LoggerInterf
LoggerInterface
通过依赖项As的构造函数传递,这允许依赖项输出到控制台
我的问题是:
LoggerInterface
,还是有更好的实践?或者我甚至不应该把它传给这些班级LoggerInterface
的情况下工作,我是否总是检查$this->logger
是否为null,然后采取相应的行动class ObjectOne {
/**
* @var LoggerInterface
*/
private $logger;
public function __construct (LoggerInterface $logger) {
$this->logger = $logger;
}
}
class ObjectTwo {
/**
* @var ObjectOne[]
*/
private $items;
/**
* @var LoggerInterface
*/
private $logger;
public function __construct (LoggerInterface $logger) {
$this->logger = $logger;
}
public function addObject () {
$this->items[] = new ObjectOne($this->logger);
}
}
在这种情况下,
LoggerInterface
的使用只不过是一种类型提示
如果传递未实现此接口的类(或任何其他对象)的实例,例如:
$objectOne = new ObjectOne('randomstring');
将抛出一个错误,说明ObjectOne
的第一个参数必须是LoggerInterface
的实例,字符串已给定
您可以完全删除此类型提示,但随后可以使用任何类型的第一个参数实例化您的类。因此,删除此检查可能会产生意外错误,例如,如果第一个参数不是实现
LoggerInterface
的类的实例,并且您尝试调用该参数是其实例的类未实现的方法
此外,接口允许强制类实现与接口实现的方法相同的方法,这是类之间的一种契约。因此,您可以有几个不同的类实现同一个接口,并尊重类构造函数第一个参数的类型提示