ホームページ >php教程 >php手册 >PHP オブジェクト指向ガイド (16) オブジェクトのシリアル化

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

WBOY
WBOYオリジナル
2016-06-13 12:21:37894ブラウズ

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



コードをコピー

コードは次のとおりです: <class Person{

/? /以下は人のメンバー属性です

var $name; //人の名前
var $sex; //人の年齢
//構築方法を定義しますパラメータには属性 name $name、性別 $sex、年齢 $age が割り当てられます。
function __construct($name="", $sex="", $age=""){
$this->name = $name;
$this->sex=$sex;
$this->age=$age;
}
//この人の話し方、自分の属性を伝える
function Say() {
echo "私の名前は: ".$this->name." 性別: ".$this->性別" 私の年齢: ".$this->age ."
";
}
}
$p1=new person("张三", "男", 20);
$p1_string=serialize( $p1); /オブジェクトをシリアル化して文字列を返します
echo $p1_string."
" //通常はシリアル化された文字列を解析しません
$p2= unserialize($p1_string) //シリアル化された文字列を逆シリアル化します。オブジェクト $p2
$p2->say();
?>上記の例の出力結果:
コード スニペット
O:6: "人物":3:{s:4:"名前";s:4:"張三";s:3:"性別"; s:2:"男性";s:3:"年齢";i: 20;}
私の名前: Zhang San 性別: 男性 私の年齢: 20
php5 には 2 つあります。マジック メソッド __sleep() メソッドと __wakeup() メソッドは、オブジェクトがシリアル化されるときに < を呼び出します。 🎜> 就寝前にいくつかの作業を完了するための __sleep() メソッド。また目覚めるときに、つまりバイナリによって文字列がオブジェクト
に再結合されると、PHP の別の関数 __wakeup() が実行されます。オブジェクトが起動したときに実行する必要があるいくつかのアクションを実行するために、自動的に呼び出されます。
__sleep() 関数はパラメーターを受け入れませんが、シリアル化する必要があるプロパティを含む配列を返します。

に含まれない属性はシリアル化中に無視されます。 __sleep() メソッドがない場合、PHP はすべての属性を保存します。
コード スニペット



コードをコピー

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


<
class Person{ / /以下は人物のメンバー属性です

var $name; //人物の名前var $sex //人物の性別var $age;人の年齢//定義 コンストラクター パラメーターは属性名 $name、性別 $sex および年齢 $age function __construct($name="", $sex="", $age) に割り当てられます。 =""){

$this->name=$name;

$this->gt;年齢=$年齢;
>//この人の話し方は、自分の属性関数を公開するsay()
{
echo "My name is: ".$this->name." Gender: ".$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

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