ホームページ バックエンド開発 PHPチュートリアル PHPで変数をシリアル化する3つの方法

PHPで変数をシリアル化する3つの方法

Jun 23, 2016 pm 02:30 PM

シリアル化は、変数を保存または送信できる文字列に変換するプロセスです。逆シリアル化は、適切なときに使用できるように文字列を元の変数に変換することです。これら 2 つのプロセスを組み合わせることで、データの保存と転送が容易になり、プログラムの保守性が向上します。

1. シリアル化関数とシリアル化解除関数

これら 2 つは、PHP でデータをシリアル化および逆シリアル化するための一般的な関数です。

PHP コード

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut') // シリアル化された配列 $ s =serialize($a); //出力結果: a:3:{s:1:"a";s:5:"Apple";s:1:"b";s:6: "バナナ";s:1:"c";s:7:"ココナッツ";} echo '<br /><br />'; //逆シリアル化 $o = unserialize($s) ; print_r( $o);この問題を克服するための巧妙なトリックは、base64_encode とbase64_decode を使用することです。


PHP コード

$obj = array(); //シリアル化 $s =base64_encode(serialize($obj)) //デシリアライズ $original = unserialize(base64_decode($s));エンコードすると文字列の長さが長くなります。この問題を解決するには、gzcompress を使用します。 PHPコード

//「 's’ s ’' s 's' s 's' s 's' s 'and ize($ txt)を使用して使用するオブジェクトをシリアル化するために使用される関数を定義します{eおよびjson_decode形式の出力をreturnフォーマットのシリアル化とシリアル化解除ははるかに高速です。 JSON 形式は人間が判読できます。 JSON 形式はシリアル化よりも小さいデータを返します。 JSON 形式はオープンで移植可能です。他の言語でも同様に使用できます。

PHP コード

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut') //シリアル化された配列 $s = json_encode($a); echo $s; // 出力結果: {"a":"Apple","b":"banana","c":"Coconut"} echo '<br /> br />'; //Deserialization $o = json_decode($s);

上記の例では、json_encode 出力の長さは前の例のシリアライズ出力長よりも明らかに短くなります。

3. var_export と eval

var_export 関数は変数を文字列として出力し、eval は文字列を PHP コードとして実行し、逆シリアル化して元の変数の内容を取得します。



PHP コード

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut') // シリアル化された配列 $ s = var_export($a, true); //出力結果: array ( 'a' => 'Apple', 'b' => 'banana', 'c' => 'ココナッツ' , ) echo '<br /><br />' //逆シリアル化 eval('$my_var=' . $s . ';');

4. deserialize

wddx_serialize_value 関数は、配列変数をシリアル化し、XML 文字列として出力できます。

PHP コード

$a = array('a' => 'Apple' ,'b' => 'banana' , 'c' => 'Coconut') //配列をシリアル化 $s = wddx_serialize_value($a); $s; //出力結果 (出力文字列のソース コードを表示): <wddxPacket version='1.0'><header/><data><struct><var name='a' > ;<string>Apple</string></var><var name='b'><string>バナナ</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 [b] => Banana 1 => Coconut )


ご覧のとおり、XML はtag 文字数が多いので、この形式で連載するとやはり容量が大きくなってしまいます。

結論

上記の関数はすべて、配列変数をシリアル化する場合には正常に実行できますが、オブジェクトを使用する場合は異なります。たとえば、json_encode シリアル化オブジェクトは失敗します。オブジェクトを逆シリアル化する場合、unserialize と eval の効果は異なります。

英語原文: phpで変数をシリアル化する3つの方法

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles