我需要为我的简单项目提供建议。这是一个记录器系统。我有以下文件/类
文件 - 检查文件是否可读等
ConfigParser - 它是一个抽象类,我使用__construct方法来做一些事情。该类永远不会直接实例化。这是装饰师。
abstract class ConfigParser
{
protected $filename;
public function __construct($file)
{
// Here I want to invoke validate() method of File class
// I know that I can do $file = new File(); $file->validate()
// but the idea is to keep the things decoupled
// Also I know that I can extend the File class ConfigParser extends File
// but this doesn't make sence
// I can pass the File object on child class new XmlParser('file.xml', $fileObj)
// but this doesn't make sence too.
// I don't want to use traits as it's bizarre for me
}
}
XmlParser - 扩展ConfigParser
IniParser - 扩展ConfigParser
由于项目目标是保持类分离,我无法弄清楚如何在这种情况下实现File类。
答案 0 :(得分:0)
我不认为在构造函数中进行验证是一个很好的设计。构造函数应该只创建解析器,并可能执行简单事情。
你可以做的是使用模板方法模式,然后在父类中进行验证,并将真正的解析委托给实际的解析器类。
abstract class ConfigParser {
final function parse(){
$file->validate();
$this->conreteParse();
}
abstract function concreteParse();
}