【閑扯】PHP Serializable接口
偶然在網(wǎng)上看到了個php序列化的問題。序列化的結(jié)果為什么是"C:"而不是"O:":
先說"C:"開頭的意思,我暫且叫他C格式(C format)
chatgpt3.5給出的解釋是:序列化時,使用Class serializer產(chǎn)生的結(jié)果是C格式。
反之,如果序列化時,使用Object?serializer產(chǎn)生的結(jié)果是O格式。
但是根據(jù)他提供的demo并不能生成C格式的結(jié)果。
個人認(rèn)為C格式的意思應(yīng)該是Customized serializing。
經(jīng)過嘗試,最后通過Serializable接口生成C格式結(jié)果。
The Serializable interface
php官方文檔解釋:
用來自定義序列化的接口,php提供了serializable接口,以實(shí)現(xiàn)更加細(xì)微的控制(fine-grained control)

當(dāng)我們對一個對象設(shè)置了自定義序列化,那么該對象序列化后的結(jié)果就是C格式。官方給我們舉了一個例子:
在這個例子中,重新定義了serialize和unserialize方法,再使用serialize,只對data的值進(jìn)行了序列化,實(shí)現(xiàn)了更加細(xì)微的控制(fine-grained control)。
更多姿勢參考:https://www.php.net/manual/en/class.serializable.php