ホームページ >バックエンド開発 >PHPチュートリアル >PHP で変数をシリアル化および逆シリアル化する方法
シリアル化は、変数を保存または送信できる文字列に変換するプロセスです。逆シリアル化は、適切なときに使用できるように文字列を元の変数に変換することです。
これら 2 つのプロセスを組み合わせることで、データの保存と転送が容易になり、プログラムの保守性が向上します。
1. シリアル化関数とアンシリアル化関数。これら 2 つは、PHP でデータをシリアル化および逆シリアル化するための一般的な関数です。
$a=array('a'=>'Apple','b'=>'banana','c'=>'Coconut');
//配列をシリアル化//出力結果:
array('a'=>'Apple','b'=>'バナナ ',' c'=>'Coconut')
ただし、配列値に二重引用符、一重引用符、コロンなどの文字が含まれている場合、逆シリアル化した後に問題が発生する可能性があります。
この問題を解決するには、base64_encode 関数とbase64_decode 関数を使用するという巧妙な方法があります。
$obj=array();
//シリアル化$original=unserialize (base64_decode($s)); Base64 エンコードにより文字列の長さが増加するため、これは完全な解決策ではありません。この問題を解決するには、次のように gzcompress と併用します。
//オブジェクトをシリアル化する関数を定義します
function my_serialize($obj){//シリアル化された配列
echo $s; ","b ":"banana","c":"Coconut"}//配列をシリアル化
$s=var_export($a,true);echo $s>//出力結果: array('a'=>'Apple','b'=>'banana' , 'c'=>'ココナッツ')
$a=array('a'=>'Apple','b'=>'banana','c'=>'Coconut');
//配列をシリアル化$s=wddx_serialize_value($a);
echo $s;//出力結果 (出力文字列のソースコードを表示): ApplebananaCoconut
結論: 上記の関数はすべて、配列変数をシリアル化する場合には正常に実行できますが、オブジェクトに適用すると異なります。
たとえば、json_encode シリアル化オブジェクトは失敗します。オブジェクトを逆シリアル化する場合、unserialize と eval の効果は異なります。