PHPオブジェクトの保存と送信(オブジェクトのシリアル化)
オブジェクトの保存と送信
実際のプロジェクトアプリケーションでは、スクリプトが実行されるまで変数が完了しないため、一部のタスクは1〜2ページで完了できません。 、このページで生成されたオブジェクトが他のページで使用されると問題が発生します。
オブジェクトとそのメソッドを、オブジェクトを使用したいページに渡す必要がある場合、比較的単純で実行可能な方法は、オブジェクトをシリアル化して保存するか、必要なページに直接転送することです。オブジェクトをセッション変数として登録します。
シリアル化されたオブジェクト
オブジェクトのシリアル化とは、オブジェクトを保存可能なバイト ストリームに変換することです。オブジェクトをネットワーク経由で送信する必要がある場合、またはオブジェクトをファイルまたはデータベースに書き込む必要がある場合は、オブジェクトをシリアル化する必要があります。
シリアル化の完全なプロセスには 2 つのステップが含まれます。1 つはオブジェクトをバイナリ文字列に変換するシリアル化で、もう 1 つはオブジェクトをシリアル化するために使用されるシリアル化解除です。次に、バイナリ文字列がオブジェクトに変換され、unserialize() 関数を使用してシリアル化されたオブジェクトが逆シリアル化されます。このようにして、すべてのプロセスが完了すると、オブジェクト内の型構造とデータが完成します。
構文:
string Serialize(mixed value )
mixed unserialize( string str [, string callback] )
例:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $p1 = new Person("张三", 20); $p1_string = serialize($p1); //将对象序列化后写入文件 $fh = fopen("p1.text", "w"); fwrite($fh, $p1_string); fclose($fh); ?>
p1.text ファイルを開くと、そこに書かれている内容は次のとおりです:
O:6 :"人物":2:{s:12:"人物名";s:4:"張三";s:11:"人物年齢";i:20;}
しかし通常は上記シーケンスは直接解析されません。文字が生成されます。
逆シリアル化:
<?php class Person { private $name; private $age; function __construct($name, $age) { $this->name = $name; $this->age = $age; } function say() { echo "我的名字叫:".$this->name."<br />"; echo " 我的年龄是:".$this->age; } } $p2 = unserialize(file_get_contents("p1.text")); $p2 -> say(); ?>
この例を実行し、出力:
私の名前: Zhang San
私の年齢: 20