PHPオブジェクトのシリアル化と逆シリアル化の詳細
2439 ワード
シリアル化はいつ使用しますか?
ネットワークでオブジェクトを転送するときにデータベースにファイルを保存するとき
今日は4つの関数についてお話しします
すべてシリアル化
1.serialize(オブジェクト名)指定したクラスオブジェクトを$str=serialize($per)/perオブジェクトをシリアル化し、結果を$str 2に返す.unserialize(シリアル化された戻り値)は、オブジェクト$per=unserialize($str)を返します.
ローカルシリアル化
3.__sleep()オブジェクトの一部のプロパティをシリアル化します.
4.__wakeup()が逆直列化された場合、オブジェクトの内容を初期化(実際には修正)します.
前の2つの使い方をご紹介しましたが、簡単にご紹介します.sleep()と_wakeup()の使い方
1.オブジェクトの一部のプロパティをシリアル化したい場合は、__を使用します.sleep()関数
クラス定義に追加
2.もし私たちがクラスをシリアル化したとき、perオブジェクトのname属性値が「姜彤」だったら、逆シーケンス化したときに「張三」に変更したらどうしますか.
対象PHPのシリアル化の詳細
PHPシリアル化は変数にオブジェクトを含め、連続bytesデータに変換できることを知っています.シリアル化された変数をファイルに保存したり、ネットワーク上で転送したりして、元のデータに逆シリアル化することができます.ここではPHPシリアル化について詳しく紹介します.クラスのオブジェクトを逆シリアル化する前に定義したクラスで、PHPはそのオブジェクトの属性と方法を正常に格納することができます.逆シリアル化後すぐに実行するオブジェクトが必要になる場合があります.このような目的のためにPHPは自動的に探します_sleepと_wakeupメソッド.
オブジェクトがPHPによってシリアル化されると、PHPは__を呼び出します.sleepメソッド(存在する場合).オブジェクトを逆シリアル化すると、PHPは__を呼び出します.wakeupメソッドどちらの方法もパラメータを受け入れません.sleepメソッドは、シリアル化が必要な属性を含む配列を返さなければならない.PHPは他の属性の値を捨てます.もしなかったらsleepメソッドでは、PHPはすべてのプロパティを保存します.例1は__の使い方を示しているsleepと_wakeupメソッドはオブジェクトをシリアル化する.Idプロパティは、オブジェクトに保持する予定のない一時プロパティです.sleep法は、シリアル化するオブジェクトにid属性が含まれないことを保証する.Userオブジェクトを逆シリアル化すると、_wakeupメソッドはid属性の新しい値を確立する.この例は自己保持に設計する.実際の開発では、画像やデータストリームなどのリソースを含むオブジェクトにこれらの方法が必要であることがわかります.
Listing1 Object serialization
PHPオブジェクトのシリアル化と逆シリアル化に関する知識はここまで紹介していきますので、皆さんのお役に立てばと思います.
ネットワークでオブジェクトを転送するときにデータベースにファイルを保存するとき
今日は4つの関数についてお話しします
すべてシリアル化
1.serialize(オブジェクト名)指定したクラスオブジェクトを$str=serialize($per)/perオブジェクトをシリアル化し、結果を$str 2に返す.unserialize(シリアル化された戻り値)は、オブジェクト$per=unserialize($str)を返します.
ローカルシリアル化
3.__sleep()オブジェクトの一部のプロパティをシリアル化します.
4.__wakeup()が逆直列化された場合、オブジェクトの内容を初期化(実際には修正)します.
前の2つの使い方をご紹介しましたが、簡単にご紹介します.sleep()と_wakeup()の使い方
1.オブジェクトの一部のプロパティをシリアル化したい場合は、__を使用します.sleep()関数
クラス定義に追加
function__sleep()// name age
{
$arr=new array('name','age'); name age
Return arr;
}
2.もし私たちがクラスをシリアル化したとき、perオブジェクトのname属性値が「姜彤」だったら、逆シーケンス化したときに「張三」に変更したらどうしますか.
function __wakeup()
{
This->name=" ";
}
対象PHPのシリアル化の詳細
PHPシリアル化は変数にオブジェクトを含め、連続bytesデータに変換できることを知っています.シリアル化された変数をファイルに保存したり、ネットワーク上で転送したりして、元のデータに逆シリアル化することができます.ここではPHPシリアル化について詳しく紹介します.クラスのオブジェクトを逆シリアル化する前に定義したクラスで、PHPはそのオブジェクトの属性と方法を正常に格納することができます.逆シリアル化後すぐに実行するオブジェクトが必要になる場合があります.このような目的のためにPHPは自動的に探します_sleepと_wakeupメソッド.
オブジェクトがPHPによってシリアル化されると、PHPは__を呼び出します.sleepメソッド(存在する場合).オブジェクトを逆シリアル化すると、PHPは__を呼び出します.wakeupメソッドどちらの方法もパラメータを受け入れません.sleepメソッドは、シリアル化が必要な属性を含む配列を返さなければならない.PHPは他の属性の値を捨てます.もしなかったらsleepメソッドでは、PHPはすべてのプロパティを保存します.例1は__の使い方を示しているsleepと_wakeupメソッドはオブジェクトをシリアル化する.Idプロパティは、オブジェクトに保持する予定のない一時プロパティです.sleep法は、シリアル化するオブジェクトにid属性が含まれないことを保証する.Userオブジェクトを逆シリアル化すると、_wakeupメソッドはid属性の新しい値を確立する.この例は自己保持に設計する.実際の開発では、画像やデータストリームなどのリソースを含むオブジェクトにこれらの方法が必要であることがわかります.
Listing1 Object serialization
class User
{
public $name;
public $id;
function __construct()
{
//give user a unique ID ID
$this->id = uniqid();
}
function __sleep()
{
//do not serialize this->id id
return(array("name"));
}
function __wakeup()
{
//give user a unique ID
$this->id = uniqid();
}
}
//create object
$u = new User;
$u->name = "Leon";
//serialize it id ,id
$s = serialize($u);
//unserialize it id
$u2 = unserialize($s);
//$u and $u2 have different IDs $u $u2 ID
print_r($u);
print_r($u2);
?>
PHPオブジェクトのシリアル化と逆シリアル化に関する知識はここまで紹介していきますので、皆さんのお役に立てばと思います.