【闲扯】PHP Serializable接口
偶然在网上看到了个php序列化的问题。序列化的结果为什么是"C:"而不是"O:":
先说"C:"开头的意思,我暂且叫他C格式(C format)
chatgpt3.5给出的解释是:序列化时,使用Class serializer产生的结果是C格式。
反之,如果序列化时,使用Object serializer产生的结果是O格式。
但是根据他提供的demo并不能生成C格式的结果。
个人认为C格式的意思应该是Customized serializing。
经过尝试,最后通过Serializable接口生成C格式结果。
The Serializable interface
php官方文档解释:
用来自定义序列化的接口,php提供了serializable接口,以实现更加细微的控制(fine-grained control)

当我们对一个对象设置了自定义序列化,那么该对象序列化后的结果就是C格式。官方给我们举了一个例子:
在这个例子中,重新定义了serialize和unserialize方法,再使用serialize,只对data的值进行了序列化,实现了更加细微的控制(fine-grained control)。
更多姿势参考:https://www.php.net/manual/en/class.serializable.php