在 PHP 中,我很难在大量对象(100000 多个对象)上使用serialize
/ 。unserialize
这些对象可以有很多不同的类型,但都是基类的后代。
不知何故,当我unserialize
在对象数组上使用时,大约 0,001% 的对象生成错误!而是生成了一个完全不同的对象。这不是随机发生的,而是每次都使用相同的对象。但是如果我改变数组的顺序,它会发生在不同的对象上,所以这对我来说就像一个错误。
我切换到json_encode
/ json_decode
,但发现它总是stdClass
用作对象的类。我通过将每个对象的类名包含为一个属性来解决这个问题,然后使用这个属性构造一个新对象,但是这个解决方案不是很优雅。
使用var_export
witheval
效果很好,但比其他方法慢 3 倍,并且使用更多内存。
现在我的问题是:
- 什么可能导致创建的错误/错误对象
unserialize
? - 有没有更好的方法来使用
json_decode
对象数组,以便类以某种方式自动存储在 json 中? - 是否还有其他方法可以在 PHP 中读取/写入大量对象?
更新
我开始相信我的数组数据一定有一些奇怪的地方,因为使用msgpack_serialize
(php extension, alternative to serialize
) 我得到了同样的错误(但奇怪的是,生成的对象不是错误的!)。
更新 2
找到了一个解决方案:serialize
我不是在整个数组上做,而是在每个对象上做,先是serialize
然后base64_encode
,然后我将每个序列化的对象作为单独的行存储在文本文件中。这样我就可以生成整个对象数组,然后使用file()
withunserialize
和迭代每个对象base64_decode
:没有更多错误!