phpday 2022

igbinary_serialize

(PECL igbinary >= 1.1.1)

igbinary_serializeコンパクト、かつ保存可能な値のバイナリ表現を生成する

説明

igbinary_serialize(mixed $value): string|false

値の保存可能なバイナリ表現を生成します。

これは、値の型と構造を失うことなく、 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() の出力は、データベースでは一般的に CHARTEXT ではなく、 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() を実装したオブジェクトは、 シリアライズ可能です。 内部クラスがこれらの要件を満たさない場合、 どんなシリアライザであっても信頼できるやり方でシリアライズできません。

上記のルールには、歴史的な例外が存在します。 内部オブジェクトによっては、 それらのインターフェイスやマジックメソッドがなくても、 シリアライズできるものがありました。

参考

add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top