ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクト指向ガイド(16)オブジェクトのシリアル化_PHPチュートリアル

PHPオブジェクト指向ガイド(16)オブジェクトのシリアル化_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:43:52696ブラウズ

オブジェクトのシリアル化
送信を容易にするために、オブジェクト全体をバイナリ文字列に変換する必要がある場合があります。
相手側に到達すると、元のオブジェクトに復元できます。このプロセスは輸送と呼ばれます。ちょうど、車を船で米国に輸送する場合と同じです。車は比較的大きいため、車を小さな部品に分解し、これらの部品を米国に輸送することができます。船で米国に行き、これらの部品を車に組み立ててください。
オブジェクトをシリアル化する必要がある状況は 2 つあります。1 つ目は、オブジェクトがネットワーク経由で送信される場合で、2 つ目は、オブジェクトがファイルまたはデータベースに書き込まれる場合です。
シリアル化には 2 つのプロセスがあります。1 つはオブジェクトをバイナリ文字列に変換するシリアル化であり、もう 1 つはオブジェクトをバイナリ文字列に変換する逆シリアル化です。変換されたバイナリ文字列は、unserialize() 関数を使用してオブジェクトに変換されます。
PHPのserialize()関数のパラメータはオブジェクト名であり、戻り値は文字列です。通常、Serialize()によって返される文字列はオブジェクト情報を取得するために解析されません。この文字列はネットワークの反対側に送信したり、ウィジェットに保存したりすることができます。
PHP の unserialize() 関数は、オブジェクトを逆シリアル化するために使用されます。この関数のパラメーターは、serialize() 関数の戻り値です。
もちろん、出力は再編成されたオブジェクトです。コードスニペット



コードをコピーします

コードは次のとおりです:

class Person{ //以下は人物のメンバー属性ですvar $name;
var $sex; // 人の性別
var $age; // 人の年齢
// 属性名 $name、性別 $sex、年齢に値を割り当てるコンストラクター メソッドのパラメーターを定義します $name
function __construct($ name="", $sex=" ", $age=""){
$this->name=$name
$this->sex=$sex;
$this->age=$age; ;
}
//この人は、話し方、自分の属性を伝えることができます
function Say() {
echo "私の名前は: ".$this->name." 性別: ".$this->sex ." 私の年齢は :".$this->age."
"
}
}
$p1=new person("张三", "男", 20); ($p1); // オブジェクトをシリアル化し、文字列を返します
$p1_string."
"; // 通常、シリアル化された文字列を解析しません
$p2=unserialize($p1_string); // string into object $p2
$p2->say();


上記の例の出力結果:
コードフラグメント
O:6:"person": 3:{s:4:"name ";s:4:"张三";s:3:"性別";s:2:"男性";s:3:"年齢";i:20;}
私の名前は:張三 性別:男性私の年齢は 20 歳です。
php5 には、__sleep() メソッドと __wakeup() メソッドという 2 つの魔法のメソッドがあります。
1 つは、就寝前にいくつかの処理を完了するために __sleep() メソッドとして呼び出されます。再び目覚めます。つまり、オブジェクトがバイナリ文字列から再構成されると、PHP の別の関数 __wakeup() が自動的に呼び出され、オブジェクトの目覚めを行うだけです。アクションを実行するだけです。
__sleep() 関数はパラメータを受け入れませんが、シリアル化する必要があるプロパティを含む配列を返します。 __sleep() メソッドがない場合、ラップされていない属性はシリアル化中に無視されます。PHP はすべての属性を保存します。
コードスニペット



コードをコピー

コードは次のとおりです:


class person{
//以下は person のメンバー属性です
var $name // 人の名前; var $sex; / /人の性別var $age; //人の年齢//属性名$name、性別$sex、年齢に値を割り当てるコンストラクターメソッドのパラメータを定義します$name関数__construct($name) ="", $sex= "", $age=""){ $this->名前=$name; $this->年齢=$年齢;
}
//この人 話し方、自分の属性を伝える function Say()
{
echo "私の名前は: ".$this->name." 性別: ".$this->sex. " My age Is: ".$this->age."
"
}
//シリアル化を指定する場合、属性を無視して、返された配列内の $name と $age の値をシリアル化します。配列にはありません $sex
function __sleep() {
$arr=array("name", "age");
return($arr);
// オブジェクトを再生成するとき、$age を 40 に再割り当てします
function __wakeup () {
$this->age = 40;
}
}
$p1=new Person("Zhang San", " Male", 20)
// オブジェクトをシリアル化し、文字列を返します。 __sleep() メソッドが呼び出され、配列にない属性 $sex が無視されます
$p1_string=serialize($p1);
echo $p1_string."
" //通常は文字列を解析しません
$p2=unserialize($p1_string); // 形成されたオブジェクト $p2 をデシリアライズし、$age を 40 に再割り当てします
$p2->say();
上記の例の出力値は次のとおりです:
実行結果
O:6:"person":2:{s:4:"name";s:4:"Zhang San";s:3:"age"; i:20 ;}
私の名前: Zhang San 性別: 私の年齢: 40

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/320618.html技術記事オブジェクトをシリアル化するには、送信を容易にするために、オブジェクト全体をバイナリ文字列に変換する必要がある場合があります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。