igbinary_serialize
コンパクト、かつ保存可能な値のバイナリ表現を生成する
説明
stringfalse igbinary_serialize(mixed $value
)
これは、値の型と構造を失うことなく、
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() を実装したオブジェクトは、
シリアライズ可能です。
内部クラスがこれらの要件を満たさない場合、
どんなシリアライザであっても信頼できるやり方でシリアライズできません。
上記のルールには、歴史的な例外が存在します。
内部オブジェクトによっては、
それらのインターフェイスやマジックメソッドがなくても、
シリアライズできるものがありました。