PHP Conference Japan 2024

igbinary_serialize

(PECL igbinary >= 1.1.1)

igbinary_serialize產生值的精簡、可儲存二進位表示法

說明

igbinary_serialize(混合 $value): 字串|false

產生一個值的ді可儲存表示法。

這對於儲存或傳遞 PHP 值而不遺失其類型和結構非常有用。

要將序列化字串轉換回 PHP 值,可以使用 igbinary_unserialize()

參數

要被序列化的值。igbinary_serialize() 可以處理所有類型,除了 資源 類型和一些 物件(見下方注意事項)。即使是包含自身引用的 陣列 也可以被 igbinary_serialize() 處理。正在被序列化的 陣列物件 內部的循環引用也會被儲存。任何其他引用將會遺失。

序列化物件時,igbinary 會嘗試在序列化之前呼叫成員函式 __serialize()__sleep()。這是為了允許物件在被序列化之前進行任何最後的清理等工作。同樣地,當使用 igbinary_unserialize() 還原物件時,會呼叫 __unserialize()__wakeup() 成員函式。

注意事項:

物件 的私有成員會在成員名稱前加上類別名稱;受保護的成員會在成員名稱前加上 '*'。這些前置值的前後都有空位元組。

回傳值

返回一個字串,其中包含 value 的位元組流表示,可以儲存在任何地方。

請注意,這是一個二進位字串,可以包含任何位元組值,並且需要以這種方式儲存和處理。例如,igbinary_serialize() 的輸出通常應該儲存在資料庫的 BLOB 欄位中,而不是 CHARTEXT 欄位中。

範例

範例 #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()。如果一個內部類別不滿足這些需求中的任何一個,則它無法使用任何序列化器可靠地序列化。

上述規則有一些歷史例外,其中一些內部物件可以在不實作介面或公開方法的情況下被序列化。

參見

新增註釋

使用者提供的註釋

此頁面沒有使用者提供的註釋。
To Top