igbinary_serialize
(PECL igbinary >= 1.1.1)
igbinary_serialize — コンパクト、かつ保存可能な値のバイナリ表現を生成する
説明
値の保存可能なバイナリ表現を生成します。
これは、値の型と構造を失うことなく、 PHP の値を渡したり、保存したりする際に役立ちます。
シリアライズ済みの PHP の文字列を再度 PHP の値に戻すには、 igbinary_unserialize() が使えます。
パラメータ
value
-
シリアライズする値。 igbinary_serialize() は、resource 型やいくつかの object 型を除いた、全ての型を扱えます (下記を参照ください)。 自分自身への参照を含む配列であっても、 igbinary_serialize() でシリアライズできます。 シリアライズされる配列やオブジェクトにおける循環参照も保存されます。 それ以外の参照は失われます。
オブジェクトをシリアライズする場合、 igbinary はメンバ関数 __serialize() または __sleep() をシリアライズする前にコールしようとします。 これにより、オブジェクトはシリアライズされる直前に 最終的なクリーンアップ処理などを行えます。 同じように、 igbinary_unserialize() でオブジェクトを復元する際にも、 __unserialize() または __wakeup() メンバ関数がコールされます。
注意:
オブジェクトの private なメンバは、 メンバの名前の前にクラス名が付加されます。 protected なメンバは、 メンバ名の前に
'*'
が付加されます。 これらの先頭に付けられた値は、 シリアライズ/アンシリアライズ 双方の側で、 null バイトとして扱われます。
戻り値
任意の場所で保存できる
value
のバイナリストリーム表現を含む、
文字列を返します。
ここで返される値は、バイト値を含みうるバイナリ文字列であり、
そういうものとして扱う必要があります。
たとえば、igbinary_serialize()
の出力は、データベースでは一般的に
CHAR
や TEXT
ではなく、
BLOB
フィールドに保存する必要があります。
例
例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() を実装したオブジェクトは、 シリアライズ可能です。 内部クラスがこれらの要件を満たさない場合、 どんなシリアライザであっても信頼できるやり方でシリアライズできません。
上記のルールには、歴史的な例外が存在します。 内部オブジェクトによっては、 それらのインターフェイスやマジックメソッドがなくても、 シリアライズできるものがありました。
参考
- serialize() - 値の保存可能な表現を生成する
- igbinary_unserialize() - igbinary_serialize によって保存されたバイナリ表現から、PHP の値を復元する
- var_export() - 変数の文字列表現を出力または返す
- json_encode() - 値を JSON 形式にして返す
- オブジェクトのシリアライズ
- __sleep()
- __wakeup()
- __serialize()
- __unserialize()