(PECL igbinary >= 1.1.1)
igbinary_serialize — 產生值的精簡、可儲存二進位表示法
值
要被序列化的值。igbinary_serialize() 可以處理所有類型,除了 資源 類型和一些 物件(見下方注意事項)。即使是包含自身引用的 陣列 也可以被 igbinary_serialize() 處理。正在被序列化的 陣列 或 物件 內部的循環引用也會被儲存。任何其他引用將會遺失。
序列化物件時,igbinary 會嘗試在序列化之前呼叫成員函式 __serialize() 或 __sleep()。這是為了允許物件在被序列化之前進行任何最後的清理等工作。同樣地,當使用 igbinary_unserialize() 還原物件時,會呼叫 __unserialize() 或 __wakeup() 成員函式。
注意事項:
物件 的私有成員會在成員名稱前加上類別名稱;受保護的成員會在成員名稱前加上
'*'
。這些前置值的前後都有空位元組。
返回一個字串,其中包含 value
的位元組流表示,可以儲存在任何地方。
請注意,這是一個二進位字串,可以包含任何位元組值,並且需要以這種方式儲存和處理。例如,igbinary_serialize() 的輸出通常應該儲存在資料庫的 BLOB
欄位中,而不是 CHAR
或 TEXT
欄位中。
範例 #1 igbinary_serialize() 範例
<?php
$ser = igbinary_serialize(['test', 'test']);
echo urlencode($ser), "\n";
var_export(igbinary_unserialize($ser));
?>
上述範例將輸出
%00%00%00%02%14%02%06%00%11%04test%06%01%0E%00 array ( 0 => 'test', 1 => 'test', )
注意事項:
請注意,許多內建的 PHP 物件無法序列化。然而,具有此能力的物件會實作 Serializable 介面或魔術方法 __serialize()/__unserialize() 或 __sleep()/__wakeup()。如果一個內部類別不滿足這些需求中的任何一個,則它無法使用任何序列化器可靠地序列化。
上述規則有一些歷史例外,其中一些內部物件可以在不實作介面或公開方法的情況下被序列化。