北大荒建设集团有限公司网站,aso优化前景,翻页大图网站,西安易码建站在PHP中#xff0c;serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢#xff1f;假设一个对象和一个数组#xff1a;PHP1234$webnewstdClass;$web-sitetantengvip;$web-ownertuntun;$web-age5;和PHP1234$webarray();$web[site]tanteng…在PHP中serialize和json两种方式对一个对象或数组进行序列化或反序列化有什么区别呢假设一个对象和一个数组PHP1234$webnewstdClass;$web-sitetantengvip;$web-ownertuntun;$web-age5;和PHP1234$webarray();$web[site]tantengvip;$web[owner]tuntun;$web[age]5;对它们分别用serialize函数和unserialize函数进行序列化和反序列化看看打印结果分别是什么如下使用serialize方式PHP1234var_dump(serialize($web));var_dump(unserialize(serialize($web)));var_dump(json_encode($web));var_dump(json_decode(json_encode($web)));结果PHP12345678910111213stringO:8:stdClass:3:{s:4:site;s:10:tantengvip;s:5:owner;s:6:tuntun;s:3:age;i:5;}(length87)object(stdClass)[127]publicsitestringtantengvip(length10)publicownerstringtuntun(length6)publicageint5string{site:tantengvip,owner:tuntun,age:5}(length46)object(stdClass)[127]publicsitestringtantengvip(length10)publicownerstringtuntun(length6)publicageint5使用json方式PHP1234var_dump(serialize($web));var_dump(unserialize(serialize($web)));var_dump(json_encode($web));var_dump(json_decode(json_encode($web),true));结果PHP12345678910111213stringa:3:{s:4:site;s:10:tantengvip;s:5:owner;s:6:tuntun;s:3:age;i:5;}(length74)array(size3)sitestringtantengvip(length10)ownerstringtuntun(length6)ageint5string{site:tantengvip,owner:tuntun,age:5}(length46)array(size3)sitestringtantengvip(length10)ownerstringtuntun(length6)ageint5我们发现对于前面定义的这样一个对象或数组用serialize和json进行序列化反序列化回来的结果和原来是一样的并没有什么区别除了序列化的格式不同而已。那么它们到底有何区别以下文字总结很好就不自己加以说明了可以写代码验证。(链接)使用json序列化和反序列化优势变量序列化后依然可读可以给其他系统使用因为JSON格式是标准的劣势只对UFT-8的数据有效其他编码可能不能很好工作只对stdClass类的示例有效使用serialize方式序列化和反序列化优势允许非UTF-8的变量支持除了stdClass 示例外的其他实例劣势编码后的文本对人来说是不可读的无法被其他语言的系统引用好写个代码看看PHP123456789101112131415161718classTest{private$pripri;public$classTest;publicfunction__construct(){$this-classTest construct;$this-pripri construct;}}$testnewTest();var_dump(serialize($test));var_dump(unserialize(serialize($test)));var_dump(json_encode($test));var_dump(json_decode(json_encode($test)));结果PHP12345678910stringO:4:Test:2:{s:9:Testpri;s:13:pri construct;s:5:class;s:14:Test construct;}(length86)object(Test)[127]privatepristringpri construct(length13)publicclassstringTest construct(length14)string{class:Test construct}(length26)object(stdClass)[127]publicclassstringTest construct(length14)我们发现json序列化和反序列化丢失了类中的私有成员变量而serialize序列化和反序列化只要是类的变量都可以但是类的成员方法都无法进行序列化和反序列化。在一般情况还是使用json比较好因为json是跨平台的通用格式除了json用xml也比较好。那在什么时候使用serialize方式呢在对一个类进行serialize反序列化的时候会默认调用魔术方法__wakeUp()这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如数据库连接等。那就是另外一个问题了这里不做深究了。