php xml配置文件,关于xml:将复杂配置保留到文件(PHP)

我有一个相当大的MVC PHP Web应用程序(自定义,没有框架),它使用数百行XML文件进行配置。 配置数据具有相当复杂的结构,在XML中非常优雅地表示,但不容易使用DOM读取或写入。 所有读取和写入配置数据都通过Config类进行,该类具有每种配置数据的访问方法。 由于每个XML节点都不同,因此大多数方法都使用自己的自定义代码。 这个班目前约2000行,我不喜欢它。 数据库不可用。

我想到,保存配置数据的更好方法可能是创建一些配置类并将对象序列化用于文件。

处理复杂配置数据有哪些最佳实践?

INI文件是我用于在Zend Framework中存储配置的方式,请查看示例配置:

http://www.framework.zend.com/manual/en/zend.config.adapters.ini.html

; Production site configuration data

[production]

webhost                  = www.example.com

database.adapter         = pdo_mysql

database.params.host     = db.example.com

database.params.username = dbuser

database.params.password = secret

database.params.dbname   = dbname

; Staging site configuration data inherits from production and

; overrides values as necessary

[staging : production]

database.params.host     = dev.example.com

database.params.username = devuser

database.params.password = devsecret

阅读配置:

$config = new Zend_Config_Ini('/path/to/config.ini', 'staging');

echo $config->database->params->host;   // prints"dev.example.com"

echo $config->database->params->dbname; // prints"dbname"

编写配置:

// Load all sections from an existing config file, while skipping the extends.

$config = new Zend_Config_Ini('config.ini',

null,

array('skipExtends'        => true,

'allowModifications' => true));

// Modify a value

$config->production->hostname = 'foobar';

// Write the config file

$writer = new Zend_Config_Writer_Ini(array('config'   => $config,

'filename' => 'config.ini'));

$writer->write();

配置的每个节点都可以转换为数组,也可以使用复杂的数组创建配置类实例并将其保存到文件中。

这种类型的配置实际上是人类可读和可编辑的。

也许你应该尝试创建一些类似的解决方案。

你考虑过SQLite吗?

它是一个轻量级的独立数据库,本质上是一个文件。数据库可以在本地或远程使用。如果您能够将配置保留到文件,则还应该可以保留到SQLite数据库。

您可能希望将JSON视为序列化的另一个选项。它在理论上仍然是人类可读的,并且具有更多"对象"的好处,就像它的最终表示一样,这可能使访问代码更简单一些。另一个好处是您可以将全部或部分模型持久保存到客户端进行处理。但是你必须在你的应用程序中引入一些javascript,这可能是也可能不是你想要的。

我并不是它的忠实粉丝,但XML配置的一个优点是它至少在理论上是手工编辑的。使用任何复杂的序列化PHP对象,将其称为可手动编辑将是一个真正的延伸;与使用十六进制编辑器修改二进制可执行文件中的字符串相比,它只会稍微困难且容易出错。

因此,如果您希望友好地在界面之外配置文件编辑,那么PHP对象序列化是不可取的。但是,如果你不关心它,它可能会很好。

对于它的价值,我强烈怀疑你的XML节点的自定义代码可以在很大程度上被排除和推广。

如果您喜欢配置结构的布局,我认为您最好重构配置处理程序的现有代码库。我不知道你是否会从序列化中获得很多好处。如果有的话,我认为如果结构发生变化,调试会有点困难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值