<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; 序列化</title>
	<atom:link href="https://www.phppan.com/tag/%e5%ba%8f%e5%88%97%e5%8c%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 25 Apr 2026 00:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>序列化和json</title>
		<link>https://www.phppan.com/2011/03/serialize-json/</link>
		<comments>https://www.phppan.com/2011/03/serialize-json/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 01:02:06 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[序列化]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1292</guid>
		<description><![CDATA[序列化和json 【序列化的概念】 序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h1 style="font-weight: normal; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.4em; color: #006ea3; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-bottom: 10px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #aaaaaa;">序列化和json</h1>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">【序列化的概念】</h2>
<p style="text-indent: 2em;">序列化是将对象状态转换为可保持或可传输的格式的过程。与序列化相对的是反序列化，它将流转换为对象。这两个过程结合起来，可以轻松地存储和传输数据。</p>
<p style="text-indent: 2em;">将对象的状态信息转换为可以存储或传输的窗体的过程。 在序列化期间，对象将其当前状态写入到临时或持久性存储区。以后，可以通过从存储区中读取或反序列化对象的状态，重新创建该对象。</p>
<p style="text-indent: 2em;">通常，对象实例的所有字段都会被序列化，这意味着数据会被表示为实例的序列化数据。这样，能够解释该格式的代码有可能能够确定这些数据的值，而不依赖于该成员的可访问性。类似地，反序列化从序列化的表示形式中提取数据，并直接设置对象状态，这也与可访问性规则无关。 对于任何可能包含重要的安全性数据的对象，如果可能，应该使该对象不可序列化。如果它必须为可序列化的，请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点，则应注意该数据会被公开给任何拥有序列化权限的代码，并确保不让任何恶意代码获得该权限。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">【JSON的概念】</h2>
<p style="text-indent: 2em;">JSON，JavaScript Object Notation，一种更轻、更友好的用于接口(AJAX、REST等)数据交换的格式。 JSON是结构化数据串行化的文本格式，作为XML的一种替代品，用于表示客户端与服务器间数据交换有效负载的格式。它是从ECMAScript语言标准衍生而来的。JSON的设计目标是使它成为小的、轻便的、文本的，而且是JavaScript的一个子集。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">【长度的比较】</h2>
<p style="text-indent: 2em;">如下一段代码，显示了对数组和对象编码后生成的字符串及其长度</p>
<pre style="background-color: #333333; color: #ffffff; font: normal normal normal 13px/normal 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Courier New', monospace; overflow-x: auto; overflow-y: auto; padding: 10px;"><span style="color: #cc7833;">class</span> Foo <span style="color: #ffffff;">{</span>

    <span style="color: #cc7833;">public</span> <span style="color: #6d9cbe;">$int</span> <span style="color: #e0882f;">=</span> <span style="color: #1299da;">1</span><span style="color: #e0882f;">;</span>
    <span style="color: #cc7833;">public</span> <span style="color: #6d9cbe;">$bool</span> <span style="color: #e0882f;">=</span> <span style="color: #cc7833;">TRUE</span><span style="color: #e0882f;">;</span>
    <span style="color: #cc7833;">public</span> <span style="color: #6d9cbe;">$array</span> <span style="color: #e0882f;">=</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/array"><span style="color: #e2392d;">array</span></a><span style="color: #ffffff;">(</span><a style="color: #1299da; text-decoration: none;" href="http://www.php.net/array"><span style="color: #e2392d;">array</span></a><span style="color: #ffffff;">(</span><span style="color: #1299da;">1</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">,</span> <span style="color: #1299da;">2</span> <span style="color: #e0882f;">=&gt;</span> <span style="color: #56db3a;">'test'</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'string'</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>

    <span style="color: #cc7833;">public</span> <span style="color: #cc7833;">function</span> test<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$flag</span><span style="color: #ffffff;">)</span> <span style="color: #ffffff;">{</span>
        <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #6d9cbe;">$flag</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'test function for Foo &lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
    <span style="color: #ffffff;">}</span>

    <span style="color: #cc7833;">public</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/static"><span style="color: #e2392d;">static</span></a> <span style="color: #cc7833;">function</span> output<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$str</span><span style="color: #ffffff;">)</span> <span style="color: #ffffff;">{</span>
        <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #6d9cbe;">$str</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
    <span style="color: #ffffff;">}</span>

    <span style="color: #cc7833;">public</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/static"><span style="color: #e2392d;">static</span></a> <span style="color: #cc7833;">function</span> compare_serialize_and_json<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$data</span><span style="color: #ffffff;">)</span> <span style="color: #ffffff;">{</span>
        <span style="color: #6d9cbe;">$serialize_str</span> <span style="color: #e0882f;">=</span>  <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/serialize"><span style="color: #e2392d;">serialize</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$data</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
        <span style="color: #cc7833;">self</span><span style="color: #e0882f;">::</span><span style="color: #ffffff;">output</span><span style="color: #ffffff;">(</span><span style="color: #56db3a;">'序列化后的值:'</span> <span style="color: #e0882f;">.</span> <span style="color: #6d9cbe;">$serialize_str</span> <span style="color: #e0882f;">.</span> <span style="color: #99ff00;">"; length="</span> <span style="color: #e0882f;">.</span>
            <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/strlen"><span style="color: #e2392d;">strlen</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$serialize_str</span><span style="color: #ffffff;">)</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>

        <span style="color: #6d9cbe;">$json_str</span> <span style="color: #e0882f;">=</span> json_encode<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$data</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
        <span style="color: #cc7833;">self</span><span style="color: #e0882f;">::</span><span style="color: #ffffff;">output</span><span style="color: #ffffff;">(</span><span style="color: #56db3a;">'JSON后的值:'</span> <span style="color: #e0882f;">.</span> <span style="color: #6d9cbe;">$json_str</span> <span style="color: #e0882f;">.</span> <span style="color: #99ff00;">"; length="</span> <span style="color: #e0882f;">.</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/strlen"><span style="color: #e2392d;">strlen</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$json_str</span><span style="color: #ffffff;">)</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
    <span style="color: #ffffff;">}</span>

<span style="color: #ffffff;">}</span>

<span style="color: #6d9cbe;">$test_data</span> <span style="color: #e0882f;">=</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/array"><span style="color: #e2392d;">array</span></a><span style="color: #ffffff;">(</span><span style="color: #56db3a;">'wwww'</span> <span style="color: #e0882f;">=&gt;</span> <span style="color: #1299da;">0</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'phppan'</span> <span style="color: #e0882f;">=&gt;</span> <span style="color: #1299da;">1</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'com'</span> <span style="color: #e0882f;">=&gt;</span> <span style="color: #1299da;">2</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #bc9458; font-style: italic;">//序列化数组</span>

<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #56db3a;">'数组：&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
Foo<span style="color: #e0882f;">::</span><span style="color: #ffffff;">compare_serialize_and_json</span><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$test_data</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>

<span style="color: #6d9cbe;">$foo</span> <span style="color: #e0882f;">=</span> <span style="color: #cc7833;">new</span> Foo<span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #56db3a;">'对象:&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
Foo<span style="color: #e0882f;">::</span><span style="color: #ffffff;">compare_serialize_and_json</span><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$foo</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span></pre>
<p style="text-indent: 2em;">输出：</p>
<pre style="background-color: #333333; color: #ffffff; font: normal normal normal 13px/normal 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Courier New', monospace; overflow-x: auto; overflow-y: auto; padding: 10px;">数组：
序列化后的值<span style="color: #e0882f;">:</span>a<span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">4</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"wwww"</span><span style="color: #e0882f;">;</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">0</span><span style="color: #e0882f;">;</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">6</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"phppan"</span><span style="color: #e0882f;">;</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">;</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"com"</span><span style="color: #e0882f;">;</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">2</span><span style="color: #e0882f;">;</span><span style="color: #ffffff;">}</span><span style="color: #e0882f;">;</span> length<span style="color: #e0882f;">=</span><span style="color: #1299da;">52</span>
JSON后的值<span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span><span style="color: #99ff00;">"wwww"</span><span style="color: #e0882f;">:</span><span style="color: #1299da;">0</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"phppan"</span><span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"com"</span><span style="color: #e0882f;">:</span><span style="color: #1299da;">2</span><span style="color: #ffffff;">}</span><span style="color: #e0882f;">;</span> length<span style="color: #e0882f;">=</span><span style="color: #1299da;">29</span>
对象<span style="color: #e0882f;">:</span>
序列化后的值<span style="color: #e0882f;">:</span>O<span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"Foo"</span><span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"int"</span><span style="color: #e0882f;">;</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">;</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">4</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"bool"</span><span style="color: #e0882f;">;</span>b<span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">;</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">5</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"array"</span><span style="color: #e0882f;">;</span>a<span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">0</span><span style="color: #e0882f;">;</span>
    a<span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">0</span><span style="color: #e0882f;">;</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">;</span><span style="color: #ffffff;">}</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">2</span><span style="color: #e0882f;">;</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">4</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"test"</span><span style="color: #e0882f;">;</span>i<span style="color: #e0882f;">:</span><span style="color: #1299da;">3</span><span style="color: #e0882f;">;</span>s<span style="color: #e0882f;">:</span><span style="color: #1299da;">6</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"string"</span><span style="color: #e0882f;">;</span><span style="color: #ffffff;">}</span><span style="color: #ffffff;">}</span><span style="color: #e0882f;">;</span> length<span style="color: #e0882f;">=</span><span style="color: #1299da;">111</span>
JSON后的值<span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span><span style="color: #99ff00;">"int"</span><span style="color: #e0882f;">:</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"bool"</span><span style="color: #e0882f;">:</span><span style="color: #cc7833;">true</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"array"</span><span style="color: #e0882f;">:</span><span style="color: #ffffff;">{</span><span style="color: #99ff00;">"0"</span><span style="color: #e0882f;">:</span><span style="color: #ffffff;">[</span><span style="color: #1299da;">1</span><span style="color: #ffffff;">]</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"2"</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"test"</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"3"</span><span style="color: #e0882f;">:</span><span style="color: #99ff00;">"string"</span><span style="color: #ffffff;">}</span><span style="color: #ffffff;">}</span><span style="color: #e0882f;">;</span> length<span style="color: #e0882f;">=</span><span style="color: #1299da;">63</span></pre>
<p style="text-indent: 2em;">很明显的长度区别，<strong>serialize在编码后大概是json的两倍</strong>。</p>
<p style="text-indent: 2em;"><strong>原因：</strong></p>
<ul>
<li>serialize后字符串包含了子串的长度，这可能是速度方面的优化，典型的<strong>空间换时间</strong>，但是它本身还是太重了。</li>
<li>serialize有更加详细的类型区分，而json只有四种类型，并且是以简单的符号表示。</li>
</ul>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">【速度的比较】</h2>
<p style="text-indent: 2em;">以代码说明问题，如下比较速度的代码：</p>
<pre style="background-color: #333333; color: #ffffff; font: normal normal normal 13px/normal 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Courier New', monospace; overflow-x: auto; overflow-y: auto; padding: 10px;"><span style="color: #6d9cbe;">$max_index</span> <span style="color: #e0882f;">=</span> <span style="color: #1299da;">10</span><span style="color: #e0882f;">;</span>
<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/ini_set"><span style="color: #e2392d;">ini_set</span></a><span style="color: #ffffff;">(</span><span style="color: #99ff00;">"memory_limit"</span><span style="color: #e0882f;">,</span><span style="color: #99ff00;">"512M"</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$array</span> <span style="color: #e0882f;">=</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/array_fill"><span style="color: #e2392d;">array_fill</span></a><span style="color: #ffffff;">(</span><span style="color: #1299da;">0</span><span style="color: #e0882f;">,</span> <span style="color: #1299da;">1000000</span><span style="color: #e0882f;">,</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/rand"><span style="color: #e2392d;">rand</span></a><span style="color: #ffffff;">(</span><span style="color: #1299da;">1</span><span style="color: #e0882f;">,</span> <span style="color: #1299da;">9999</span><span style="color: #ffffff;">)</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>

<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #56db3a;">'serialize：&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$start</span> <span style="color: #e0882f;">=</span> xdebug_time_index<span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #ff8400;">for</span> <span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$i</span> <span style="color: #e0882f;">=</span> <span style="color: #1299da;">0</span><span style="color: #e0882f;">;</span>  <span style="color: #6d9cbe;">$i</span> <span style="color: #e0882f;">&lt;</span> <span style="color: #6d9cbe;">$max_index</span><span style="color: #e0882f;">;</span> <span style="color: #6d9cbe;">$i</span><span style="color: #e0882f;">++</span><span style="color: #ffffff;">)</span> <span style="color: #ffffff;">{</span>
    <span style="color: #6d9cbe;">$str</span> <span style="color: #e0882f;">=</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/serialize"><span style="color: #e2392d;">serialize</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$array</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #ffffff;">}</span>
<span style="color: #6d9cbe;">$end</span> <span style="color: #e0882f;">=</span> xdebug_time_index<span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #6d9cbe;">$end</span> <span style="color: #e0882f;">-</span> <span style="color: #6d9cbe;">$start</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>

<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #56db3a;">'json：&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$start</span> <span style="color: #e0882f;">=</span> xdebug_time_index<span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #ff8400;">for</span> <span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$i</span> <span style="color: #e0882f;">=</span> <span style="color: #1299da;">0</span><span style="color: #e0882f;">;</span>  <span style="color: #6d9cbe;">$i</span> <span style="color: #e0882f;">&lt;</span> <span style="color: #6d9cbe;">$max_index</span><span style="color: #e0882f;">;</span> <span style="color: #6d9cbe;">$i</span><span style="color: #e0882f;">++</span><span style="color: #ffffff;">)</span> <span style="color: #ffffff;">{</span>
    <span style="color: #6d9cbe;">$str</span> <span style="color: #e0882f;">=</span> json_encode<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$array</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #ffffff;">}</span>
<span style="color: #6d9cbe;">$end</span> <span style="color: #e0882f;">=</span> xdebug_time_index<span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #6d9cbe;">$end</span> <span style="color: #e0882f;">-</span> <span style="color: #6d9cbe;">$start</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/unset"><span style="color: #e2392d;">unset</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$array</span><span style="color: #e0882f;">,</span> <span style="color: #6d9cbe;">$str</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span></pre>
<p style="text-indent: 2em;">输出：</p>
<pre style="background-color: #333333; color: #ffffff; font: normal normal normal 13px/normal 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Courier New', monospace; overflow-x: auto; overflow-y: auto; padding: 10px;">serialize：
<span>9.5371007919312</span>
json：
<span>1.4313209056854</span></pre>
<p style="text-indent: 2em;">serialize的速度在大数据量的情况下比json差了快一个数量级。</p>
<p style="text-indent: 2em;">从上面两点看，json不管是在速度还是在生成的字符串的大小上都比serialize要好，那为什么serialize还要存在呢？ 原因在下面这个点：实现的功能。</p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">【处理对象】</h2>
<p style="text-indent: 2em;">如下代码：</p>
<pre style="background-color: #333333; color: #ffffff; font: normal normal normal 13px/normal 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Courier New', monospace; overflow-x: auto; overflow-y: auto; padding: 10px;"><a style="color: #1299da; text-decoration: none;" href="http://www.php.net/header"><span style="color: #e2392d;">header</span></a><span style="color: #ffffff;">(</span><span style="color: #99ff00;">"Content-type:text/html;charset=utf8"</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #cc7833;">class</span> Foo <span style="color: #ffffff;">{</span>
     <span style="color: #cc7833;">public</span> <span style="color: #cc7833;">function</span> test<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$flag</span><span style="color: #ffffff;">)</span> <span style="color: #ffffff;">{</span>
        <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #6d9cbe;">$flag</span><span style="color: #e0882f;">,</span> <span style="color: #56db3a;">'test function for Foo &lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
    <span style="color: #ffffff;">}</span>
<span style="color: #ffffff;">}</span>

<span style="color: #6d9cbe;">$foo</span> <span style="color: #e0882f;">=</span> <span style="color: #cc7833;">new</span> Foo<span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>

<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/echo"><span style="color: #e2392d;">echo</span></a> <span style="color: #56db3a;">'反序列化测试：&lt;br /&gt;'</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$foo</span><span style="color: #e0882f;">-&gt;</span><span style="color: #ffffff;">test</span><span style="color: #ffffff;">(</span><span style="color: #1299da;">1</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$serialize_str</span> <span style="color: #e0882f;">=</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/serialize"><span style="color: #e2392d;">serialize</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$foo</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$obj</span> <span style="color: #e0882f;">=</span> <a style="color: #1299da; text-decoration: none;" href="http://www.php.net/unserialize"><span style="color: #e2392d;">unserialize</span></a><span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$serialize_str</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$obj</span><span style="color: #e0882f;">-&gt;</span><span style="color: #ffffff;">test</span><span style="color: #ffffff;">(</span><span style="color: #1299da;">2</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>

<span style="color: #6d9cbe;">$foo</span><span style="color: #e0882f;">-&gt;</span><span style="color: #ffffff;">test</span><span style="color: #ffffff;">(</span><span style="color: #1299da;">1</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$json_str</span> <span style="color: #e0882f;">=</span> json_encode<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$foo</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$obj</span> <span style="color: #e0882f;">=</span> json_decode<span style="color: #ffffff;">(</span><span style="color: #6d9cbe;">$json_str</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<span style="color: #6d9cbe;">$obj</span><span style="color: #e0882f;">-&gt;</span><span style="color: #ffffff;">test</span><span style="color: #ffffff;">(</span><span style="color: #1299da;">2</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span>
<a style="color: #1299da; text-decoration: none;" href="http://www.php.net/die"><span style="color: #e2392d;">die</span></a><span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span><span style="color: #e0882f;">;</span></pre>
<p style="text-indent: 2em;">输出：</p>
<pre style="background-color: #333333; color: #ffffff; font: normal normal normal 13px/normal 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Courier New', monospace; overflow-x: auto; overflow-y: auto; padding: 10px;">反序列化测试：
1test <span style="color: #cc7833;">function</span> <span style="color: #ff8400;">for</span> Foo
2test <span style="color: #cc7833;">function</span> <span style="color: #ff8400;">for</span> Foo
1test <span style="color: #cc7833;">function</span> <span style="color: #ff8400;">for</span> Foo 

<span style="color: #ffffff;">(</span> <span style="color: #e0882f;">!</span> <span style="color: #ffffff;">)</span> Fatal error<span style="color: #e0882f;">:</span> Call to undefined method stdClass<span style="color: #e0882f;">::</span><span style="color: #ffffff;">test</span><span style="color: #ffffff;">(</span><span style="color: #ffffff;">)</span></pre>
<p style="text-indent: 2em;"><strong>json无法处理对象方法等数据。</strong></p>
<h2 style="font-weight: bold; font-family: 'Microsoft YaHei', Helvetica, Arial, sans-serif; font-size: 1.2em; color: #333333;">【使用范围】</h2>
<ul>
<li>序列化使用serialize，特别是对象的存储。这是其存在的意义。</li>
<li>与对象无关的数据存储可以使用json，如包含大量数字的数组等。只是当遇到这种情况，我们需要做的可能是重构数据库了。</li>
<li>数据交换时使用JSON，这也是其定义所在。</li>
<li>目前JSON是能用于UTF-8编码的数据。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2011/03/serialize-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
