【问题标题】:PHP XML serializerPHP XML 序列化程序
【发布时间】:2013-04-25 13:01:31
【问题描述】:

是否有一些 php 库可以将数据序列化为 XML 格式,例如 serialize()unserialize()(从 XML 恢复对象)具有 privateprotected 字段的对象的函数?

PEAR XML_Serializer 可以与 type hints 选项一起正常工作,但它不处理受保护的字段。

【问题讨论】:

  • 如果 PEAR XML_Serializer 工作正常,使用 PHP 5.3 的反射添加对受保护字段的支持是否很容易?我可以想象在编写类时这是不可能的,所以可能添加一个标志并扩展字段的序列化/反序列化方法可以做到这一点。它现在在 github 上可用,因此可能很容易修补和跟踪上游更改:github.com/pear/XML_Serializer
  • @hakre 非常感谢,只需 6 行代码就可以为我们的项目需求修补 XML_Serializer/XML_Unserializer 类!
  • 我建议你也把fork放到github上。所以梨的人可以看到这一点。我会说可能非常有用。受保护的成员在序列化中是有意义的(但这可能是一个极端情况,可能是一种气味)。不过分享还是不错的。
  • @hakre 我认为这个提交会很臭,因为在 XML_Unserializer 中,我们的代码填充对象的私有和受保护字段,假设每个字段都有适当的设置器(例如,private $_id; 有应该是 setter public setId($id); 设置 $_id 而对其他私有变量没有任何影响)。
  • 当然可以,但无论如何我会说值得分享。这可以变成一个标志并有条件地启用。或者根据需要只更新 fork。

标签: php xml serialization pear


【解决方案1】:

Symfony Serializer Component 提供 serialize()deserialize() 方法并支持多种开箱即用的格式:XML、JSON、YAML...

它包含在 Symfony 中,但您甚至可以在非 Symfony 项目中使用它,通过使用 composer 安装它:

composer require symfony/serializer

如果您使用documentation example 中所示的ObjectNormalizer,请不要忘记同时安装symfony/property-access

【讨论】:

    【解决方案2】:

    希望这不会被视为垃圾邮件,但我一直在研究一个库,该库处理从 XML 到 XML 的序列化和反序列化对象。

    https://github.com/evert/sabre-xml/

    但是,它并不能完全满足您的要求。您要序列化的每个对象都需要实现serializeXMLdeserializeXML 方法。在这种方法中,您可以确切地决定您需要实现什么。

    如果您确实打算使用它,我实际上很乐意将您想要的确切功能包含为 PHP 5.4 特征。只需给我发消息(你可以在 github 上找到我的信息)。

    【讨论】:

    • 非常感谢,但我们很容易修补 PEAR XML_Serializer 类,正如 hakre 在他的评论中所建议的那样。在尝试扩展 XML_Serializer 功能之前,我们考虑使用您的方式。
    • @Evert:只要它是主题性的、有帮助的而不是垃圾邮件,并且您进行了披露,这在网站上通常不是问题。我想说,从编写自己的库的开发人员那里获得反馈总是很高兴,所以这比其他任何事情都更成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多