PHPシーケンス化変数の4つの方法
3507 ワード
シーケンス化は、変数を保存または転送可能な文字列に変換するプロセスです.逆シーケンス化は、適切なときにこの文字列を元の変数に変換して使用します.この2つのプロセスを組み合わせることで、データの格納と転送が容易になり、プログラムのメンテナンス性が向上します.
1.serializeとunserialize関数
この2つは、PHPにおけるデータのシーケンス化および逆シーケンス化の共通の関数である.
PHPコード
$obj = array();
//シリアル化
$s = base64_encode(serialize($obj));
//逆シーケンス化
$original = unserialize(base64_decode($s));
しかしbase 64符号化は文字列の長さを増加させる.この問題を克服するためにgzcompressと併用できます.
2. json_encodeとjson_decode
JSON形式のシーケンス化と逆シーケンス化を使用するのは良い選択です.
json_の使用encodeとjson_decodeフォーマットの出力はserializeとunserializeフォーマットよりずっと速いです.
JSON形式は読み取り可能です.
JSON形式はserializeよりデータを返す結果が小さい.
JSON形式はオープンで移植可能です.他の言語でも使用できます.
3. var_义齿
var_export関数は変数を文字列として出力します.evalは文字列をPHPコードとして実行し,最初の変数の内容を逆シーケンス化する.
wddx_serialize_value関数は配列変数をシーケンス化し、XML文字列として出力できます.
XMLタグ文字が多く,このフォーマットのシーケンス化には多くの空間が占められていることがわかる.
結論
上記のすべての関数は配列変数をシーケンス化する際に正常に実行できるが,オブジェクトに適用すると異なる.例えばjson_encodeシーケンス化オブジェクトは失敗します.オブジェクトを逆シーケンス化すると、unserializeとevalは異なる効果を得ます.
3 ways to serialize variables in php
1.serializeとunserialize関数
この2つは、PHPにおけるデータのシーケンス化および逆シーケンス化の共通の関数である.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//
$s = serialize($a);
echo $s;
// :a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coconut";}
echo '<br /><br />';
//
$o = unserialize($s);
print_r($o);
配列値に二重引用符、一重引用符、コロンなどの文字が含まれている場合、それらが逆シーケンス化されると、問題が発生する可能性があります.この問題を克服するために、巧みなテクニックはbase 64_を使うことです.encodeとbase 64_decode. PHPコード
$obj = array();
//シリアル化
$s = base64_encode(serialize($obj));
//逆シーケンス化
$original = unserialize(base64_decode($s));
しかしbase 64符号化は文字列の長さを増加させる.この問題を克服するためにgzcompressと併用できます.
//
function my_serialize( $obj )
{
return base64_encode(gzcompress(serialize($obj)));
}
//
function my_unserialize($txt)
{
return unserialize(gzuncompress(base64_decode($txt)));
}
2. json_encodeとjson_decode
JSON形式のシーケンス化と逆シーケンス化を使用するのは良い選択です.
json_の使用encodeとjson_decodeフォーマットの出力はserializeとunserializeフォーマットよりずっと速いです.
JSON形式は読み取り可能です.
JSON形式はserializeよりデータを返す結果が小さい.
JSON形式はオープンで移植可能です.他の言語でも使用できます.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//
$s = json_encode($a);
echo $s;
// :{"a":"Apple","b":"banana","c":"Coconut"}
echo '<br /><br />';
//
$o = json_decode($s);
上記の例ではjson_Encode出力長は、前の例のserialize出力長よりも明らかに短い. 3. var_义齿
var_export関数は変数を文字列として出力します.evalは文字列をPHPコードとして実行し,最初の変数の内容を逆シーケンス化する.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//
$s = var_export($a , true);
echo $s;
// : array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'Coconut', )
echo '<br /><br />';
//
eval('$my_var=' . $s . ';');
print_r($my_var);
4. wddx_serialize_valueとwddx deserializewddx_serialize_value関数は配列変数をシーケンス化し、XML文字列として出力できます.
$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut');
//
$s = wddx_serialize_value($a);
echo $s;
// ( ):<wddxPacket version='1.0'><header/><data><struct><var name='a'><string>Apple</string></var><var name='b'><string>banana</string></var><var name='c'><string>Coconut</string></var></struct></data></wddxPacket>
echo '<br /><br />';
//
$o = wddx_deserialize($s);
print_r($o);
//出力結果:Array([a]=>Apple=>banana 1=>Coconut)XMLタグ文字が多く,このフォーマットのシーケンス化には多くの空間が占められていることがわかる.
結論
上記のすべての関数は配列変数をシーケンス化する際に正常に実行できるが,オブジェクトに適用すると異なる.例えばjson_encodeシーケンス化オブジェクトは失敗します.オブジェクトを逆シーケンス化すると、unserializeとevalは異なる効果を得ます.
3 ways to serialize variables in php