我有扩展抽象类的类。 我需要通过字符串(最好是JSON)创建这些类的实例。
许多对象是嵌套的,许多属性是私有的。 我需要一种方法:
创建完整对象的JSON字符串(带有私有属性和嵌套对象-带有私有属性)。
从JSON字符串创建一个具有正确类型和所有嵌套对象的新对象。
我猜它需要递归。
如果我只是将对象转换为数组,则使用的命名空间最终看起来像废话。
我正在考虑编写一个解析器,在JSON字符串中标记这些类,然后为每个类硬编码一个工厂函数,但这会花费很多时间。
嘿。 我删除了laravel标签,因为似乎没有任何迹象表明它的含义? 如果您认为相关,可以随时添加它,但是请添加为什么它是您的问题。
我建议使用jms序列化器:http://jmsyst.com/libs/serializer
易于使用,可配置并支持您要求的所有功能。
我建议您使用php的序列化功能
在这种情况下,最好使用此函数,因为它存在此目的:您可以将序列化的字符串存储在所需的位置,反序列化后,您将获得具有所有属性的原始PHP对象。
正如您所说,使用JSON,您将不知道对象是什么类(除非您手动将其存储为字符串),并且当然会存在与私有属性有关的所有问题。
我正在构建一个应用程序,另一个应用程序将通过MySQL DB为它提供数据。但是,我也是要构建该应用程序的人,因此我可以做出所有决定。将序列化的字符串转换为JSON是否可行?然后将JSON转换为用于创建对象的序列化字符串?
我不确定是否可以将序列化的字符串存储在JSON中(但可能是),您必须尝试一下。是否有特定原因需要您使用JSON而不是存储普通的序列化字符串?
好。另一个应用程序将通过Javascript前端应用程序创建此数据。我不会在几周内构建该应用程序,所以我不知道我会遇到什么困难。因此,尝试尽可能多地使用JSON来随机整理数据可能是一个好主意。
是的,但是您确定需要通过前端代码创建此数据(关于php对象)吗?如果可以的话,最好使用服务器端代码。即您可以通过ajax调用创建数据
实际数据将在前端创建。您有点用块构建这些对象。因此,即使我使用后端创建对象或序列化数据,也需要从前端提取数据,以描述层次结构,对象类型和数据。
好的,但是我不明白为什么你不能拉一个序列化的字符串,也许我还没有弄清楚你的架构。无论如何,如果我是您,我将尝试检查序列化的PHP字符串是否可以存储在JSON中。如果是的话,我会那样做
谢谢@Moppo。目前,我主要是想掩盖所有将来可能遇到的麻烦。我认为您是对的,我可以提取序列化的字符串。我会尽力做到这一点。然后,我可以编写我的另一个应用程序,以便它生成这种字符串。现在要尝试一下!谢谢。
是的,我建议您进行初步测试,以查看是否可以正确序列化/反序列化对象,并在应用程序正常工作时按照您的方式传递序列数据
有三种方法可以执行此操作:JSON,序列化和var_export。
使用JSON,它仅适用于stdClass对象,但它易于阅读,并且可以在PHP之外使用。
序列化可与stdClass以外的类的实例一起使用,但是可能很难读取,只能由PHP使用。
http://php.net/manual/zh/function.serialize.php
var_export输出PHP代码以创建对象(因此您可以将其写入PHP文件),它非常易于阅读,但不能在PHP外部使用。对象将需要具有set state方法。
http://php.net/manual/zh/function.var-export.php