Php 配置解析器-静态还是非静态?

Php 配置解析器-静态还是非静态?,php,static,Php,Static,设想一种策略,您可能需要对几种格式的配置文件(例如INI、XML和YAML)使用解析器。解析这些将产生一个公共类的实例,比如'Config_Data' 我的想法是,由于解析器有一个非常简单的任务,而且我看不到任何状态,因此最好将其实现为一个静态类,因此您可以采用以下方法: Parser_Ini::parse(...); Parser_Xml::parse(...); ... 我觉得这并不完全正确,因为这些静态类当然不能实现接口等,但它们似乎很有意义 我想知道你对此事的看法:) 谢谢, Jame

设想一种策略,您可能需要对几种格式的配置文件(例如INI、XML和YAML)使用解析器。解析这些将产生一个公共类的实例,比如'Config_Data'

我的想法是,由于解析器有一个非常简单的任务,而且我看不到任何状态,因此最好将其实现为一个静态类,因此您可以采用以下方法:

Parser_Ini::parse(...);
Parser_Xml::parse(...);
...
我觉得这并不完全正确,因为这些静态类当然不能实现接口等,但它们似乎很有意义

我想知道你对此事的看法:)

谢谢,
James

这种方法不一定会带来任何好处,尤其是如果代码的其余部分是面向对象的。它还禁止您使用工厂模式之类的东西来构建解析器。

创建静态类有很多缺点,我看不出您从中获得了什么,除了一种方便的感觉,我发现这会误导您

如果您将这些类作为常规实例类来执行,并实现一个接口,那么您将可以自由地动态更改实现


依赖于解析器的类可以将接口的实现作为参数,从而可以在该类上注入所需的任何解析器类型

然而,使用配置解析器,这不是一种鸡和蛋的场景吗?例如,为了在运行时选择解析器,您需要一些配置。。。首先需要对其进行解析。如果为了将其注入类而实例化它,那么肯定只有类知道它想要解析的配置的类型,因此它也可以直接使用静态类?显然,配置解析器不能由配置来配置,但这并不意味着你不能从松散耦合的体系结构中获益。如果您需要一个新的解析器,您可以在不更改任何其他代码的情况下引入它,您只需要创建接口的新解析器a的sn实现,并在您引导应用程序的任何地方设置新解析器。这使得它是可测试的。