ホームページ  >  記事  >  バックエンド開発  >  PHPオブジェクトのシリアル化と逆シリアル化の詳細な説明

PHPオブジェクトのシリアル化と逆シリアル化の詳細な説明

WBOY
WBOYオリジナル
2016-07-29 09:05:13878ブラウズ

シリアル化をいつ使用するか?

ネットワーク経由でオブジェクトを転送し、ファイルをデータベースに保存する場合

今日は4つの関数について説明します

すべてシリアル化

1.serialize (オブジェクト名) String 指定されたクラスオブジェクト Serialization $str=serialize ($per) //オブジェクトごとにシリアル化し、結果を$str
2.unserializeに返す(シリアル化後の戻り値) 戻り結果はオブジェクト $per=unserialize($str)

部分シリアル化

;

3.__sleep() はオブジェクトのいくつかの属性をシリアル化します。

4. __wakeup() は逆シリアル化中にオブジェクトの内容を初期化します (実際には変更します)

最初の 2 つの使用方法はすでに紹介済みだと思います。次に、__sleep() と __wakeup () の使用方法を簡単に紹介します

1。オブジェクト内の一部の属性のみをシリアル化したい場合は、__sleep() 関数を使用できます

add

function__sleep()//只序列化类中的name和age成员
{
$arr=new array('name','age'); name和age必须是类中的属性 可以根据自己的实际需要增加
Return arr;
}

2。クラス When でシリアル化すると、オブジェクトごとの name 属性値は「Jiang」になります。 Tong" を逆シリアル化中に "Zhang San" に変更したい場合はどうすればよいですか

function __wakeup()
{
This->name="张三";
}

オブジェクト PHP シリアル化の詳細な紹介

PHP シリアル化がオブジェクトを含む変数を連続型に変換できることは誰もが知っています。シリアル化された変数をファイルに保存したり、ネットワーク経由で送信したりして、逆シリアル化して元のデータに戻すことができます。この記事では、PHP シリアル化について詳しく説明します。 PHP は、オブジェクトを逆シリアル化する前に、定義したクラスのプロパティとメソッドを正常に保存できます。場合によっては、オブジェクトを逆シリアル化した後すぐに実行する必要があります。このような目的のために、PHP は __sleep メソッドと __wakeup メソッドを自動的に検索します。

オブジェクトが PHP によってシリアル化されると、PHP は __sleep メソッドを呼び出します (存在する場合)。オブジェクトを逆シリアル化した後、PHP は __wakeup メソッドを呼び出します。どちらのメソッドもパラメーターを受け取りません。__sleep メソッドは、プロパティを含む配列を返す必要があります。 PHP は他のプロパティの値を破棄します。 __sleep メソッドを使用しない場合、PHP はすべての属性を保存します。例 1 は、__sleep メソッドと __wakeup メソッドを使用してオブジェクトをシリアル化する方法を示しています。Id 属性は、オブジェクトに保持されることを目的としていない一時的な属性です。__sleep メソッドは、シリアル化されたオブジェクトに id 属性が含まれていないことを保証します。逆にすると、User オブジェクトをシリアル化するために、__wakeup メソッドは id 属性の新しい値を確立します。実際の開発では、リソース (画像やデータ ストリームなど) を含むオブジェクトが必要になる場合があります。これらの方法。

Listing1 オブジェクトのシリアル化

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 オブジェクトのシリアル化と逆シリアル化に関する関連知識を紹介します。

上記では、PHP オブジェクトのシリアル化と逆シリアル化について、内容の側面も含めて詳しく説明しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

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