<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            php語言

            php中序列化和json使用方法

            時間:2025-02-21 14:07:43 php語言 我要投稿
            • 相關推薦

            php中序列化和json使用方法

              導語:序列化是將對象狀態轉換為可保持或可傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸數據。下面的是百分網小編為大家搜集的php中序列化和json使用方法,希望對你有所幫助。

              【序列化的概念】

              將對象的狀態信息轉換為可以存儲或傳輸的窗體的過程。 在序列化期間,對象將其當前狀態寫入到臨時或持久性存儲區。以后,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。

              通常,對象實例的所有字段都會被序列化,這意味著數據會被表示為實例的序列化數據。這樣,能夠解釋該格式的代碼有可能能夠確定這些數據的值,而不依 賴于該成員的可訪問性。類似地,反序列化從序列化的表示形式中提取數據,并直接設置對象狀態,這也與可訪問性規則無關。 對于任何可能包含重要的安全性數據的對象,如果可能,應該使該對象不可序列化。如果它必須為可序列化的,請嘗試生成特定字段來保存不可序列化的重要數據。 如果無法實現這一點,則應注意該數據會被公開給任何擁有序列化權限的代碼,并確保不讓任何惡意代碼獲得該權限。

              【JSON的概念】

              JSON,JavaScript Object Notation,一種更輕、更友好的用于接口(AJAX、REST等)數據交換的格式。 JSON是結構化數據串行化的文本格式,作為XML的一種替代品,用于表示客戶端與服務器間數據交換有效負載的格式。它是從ECMAScript語言標準 衍生而來的。JSON的設計目標是使它成為小的、輕便的、文本的,而且是JavaScript的一個子集。

              【長度的比較】

              如下一段代碼,顯示了對數組和對象編碼后生成的字符串及其長度

              復制代碼 代碼如下:

              class Foo {

              public $int = 1;

              public $bool = TRUE;

              public $array = array(array(1), 2 => 'test', 'string');

              public function test($flag) {

              echo $flag, 'test function for Foo <br />';

              }

              public static function output($str) {

              echo $str, '<br />';

              }

              public static function compare_serialize_and_json($data) {

              $serialize_str =  serialize($data);

              self::output('序列化后的值:' . $serialize_str . "; length=" .

              strlen($serialize_str));

              $json_str = json_encode($data);

              self::output('JSON后的值:' . $json_str . "; length=" . strlen($json_str));

              }

              }

              $test_data = array('wwww' => 0, 'phppan' => 1, 'com' => 2);

              //序列化數組

              echo '數組:<br />';

              Foo::compare_serialize_and_json($test_data);

              $foo = new Foo();

              echo '對象:<br />';

              Foo::compare_serialize_and_json($foo);

              輸出:

              復制代碼 代碼如下:

              數組:

              序列化后的值:a:3:{s:4:"wwww";i:0;s:6:"phppan";i:1;s:3:"com";i:2;}; length=52

              JSON后的值:{"wwww":0,"phppan":1,"com":2}; length=29

              對象:

              序列化后的值:O:3:"Foo":3:{s:3:"int";i:1;s:4:"bool";b:1;s:5:"array";a:3:{i:0;

              a:1:{i:0;i:1;}i:2;s:4:"test";i:3;s:6:"string";}}; length=111

              JSON后的值:{"int":1,"bool":true,"array":{"0":[1],"2":"test","3":"string"}}; length=63

              很明顯的長度區別,serialize在編碼后大概是json的兩倍。

              原因:

              ?serialize后字符串包含了子串的長度,這可能是速度方面的優化,典型的空間換時間,但是它本身還是太重了。

              ?serialize有更加詳細的類型區分,而json只有四種類型,并且是以簡單的符號表示。

              【速度的比較】

              以代碼說明問題,如下比較速度的代碼:

              復制代碼 代碼如下:

              $max_index = 10;

              ini_set("memory_limit","512M");

              $array = array_fill(0, 1000000, rand(1, 9999));

              echo 'serialize:<br />';

              $start = xdebug_time_index();

              for ($i = 0;  $i < $max_index; $i++) {

              $str = serialize($array);

              }

              $end = xdebug_time_index();

              echo $end - $start, '<br />';

              echo 'json:<br />';

              $start = xdebug_time_index();

              for ($i = 0;  $i < $max_index; $i++) {

              $str = json_encode($array);

              }

              $end = xdebug_time_index();

              echo $end - $start, '<br />';

              unset($array, $str);

              輸出:

              復制代碼 代碼如下:

              serialize:

              9.5371007919312

              json:

              1.4313209056854

              serialize的速度在大數據量的情況下比json差了快一個數量級。

              從上面兩點看,json不管是在速度還是在生成的字符串的大小上都比serialize要好,那為什么serialize還要存在呢? 原因在下面這個點:實現的功能。

              【處理對象】

              如下代碼:

              復制代碼 代碼如下:

              header("Content-type:text/html;charset=utf8");

              class Foo {

              public function test($flag) {

              echo $flag, 'test function for Foo <br />';

              }

              }

              $foo = new Foo();

              echo '反序列化測試:<br />';

              $foo->test(1);

              $serialize_str = serialize($foo);

              $obj = unserialize($serialize_str);

              $obj->test(2);

              $foo->test(1);

              $json_str = json_encode($foo);

              $obj = json_decode($json_str);

              $obj->test(2);

              die();

              輸出:

              復制代碼 代碼如下:

              反序列化測試:

              1test function for Foo

              2test function for Foo

              1test function for Foo

              ( ! ) Fatal error: Call to undefined method stdClass::test()

              json無法處理對象方法等數據。

              【使用范圍】

              ?序列化使用serialize,特別是對象的存儲。這是其存在的意義。

              ?與對象無關的數據存儲可以使用json,如包含大量數字的數組等。只是當遇到這種情況,我們需要做的可能是重構數據庫了。

              ?數據交換時使用JSON,這也是其定義所在。

              ?目前JSON是能用于UTF-8編碼的數據。

            【php中序列化和json使用方法】相關文章:

            PHP中Json應用09-05

            PHP多種序列化和反序列化的方法06-26

            php中cookie的使用方法09-27

            PHP中trait的使用方法08-20

            php多種序列化、反序列化的方法07-08

            php中iconv函數使用方法08-23

            PHP中trait使用方法介紹09-15

            PHP中trait的使用方法介紹08-07

            PHP中session使用方法詳解08-29

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院