PHPでオブジェクトをシリアル化・復元する方法:serialize()とunserialize()の使い方
はじめに
PHPでは、serialize() 関数を使うことで、任意のオブジェクトをバイトストリーム形式の文字列として表現できます。この文字列にはオブジェクトのすべてのプロパティ(変数)が含まれますが、メソッドは保存されません。生成された文字列は、ファイルなどに自由に保存することが可能です。
逆に、バイトストリームからオブジェクトを元に戻すには unserialize() 関数を使用します。重要なポイントとして、unserialize() を呼び出す前に、対応するクラス定義が利用可能な状態になっている必要があります。
serialize()によるオブジェクトの保存
まず、以下のクラスのオブジェクトをシリアル化し、その文字列をファイルに保存する例を見てみましょう。
<?php
class test1{
private $name;
function __construct($arg){
$this->name = $arg;
}
}
$obj1 = new test1("Kiran");
$str = serialize($obj1);
$fd = fopen("obj.txt", "w");
fwrite($fd, $str);
fclose($fd);
?>このコードを実行すると、現在のフォルダ内に obj.txt が作成され、シリアル化されたオブジェクトのデータが書き込まれます。
unserialize()によるオブジェクトの復元
次に、ファイルから読み込んだバイトストリームをもとに、オブジェクトを再構築するコードを見てみましょう。
<?php
class test1{
private $name;
function __construct($arg){
$this->name = $arg;
}
function getname(){
return $this->name;
}
}
$filename = "obj.txt";
$fd = fopen($filename, "r");
$str = fread($fd, filesize($filename));
fclose($fd);
$obj = unserialize($str);
echo "name: " . $obj->getname();
?>この例では、ファイルからシリアル化された文字列を読み込み、unserialize() によってオブジェクトとして復元しています。復元後は、通常のオブジェクトと同様に $obj->getname() のようにメソッドを呼び出すことができます。なお、ファイルを開いたら fclose() で閉じるのが安全です。
実行結果
上記のコードを実行すると、以下の出力が得られます。
name: Kiran
まとめ
PHPのシリアル化機能を使えば、オブジェクトの状態(プロパティ)を文字列として簡単に保存・転送でき、必要になったタイミングで元のオブジェクトとして復元できます。セッション管理やキャッシュへのデータ保存など、さまざまな場面で活用される便利な仕組みなので、ぜひ覚えておきましょう。
-
PHPのget_class()関数とは?使い方とサンプルコードを解説
PHPのget_class()関数は、オブジェクトが属するクラス名を取得するための関数です。引数に渡された値がオブジェクトでない場合にはFALSEを返します。また、クラス内部でobject引数を省略して呼び出した場合には、そのクラス自身の名前が返されます。構文get_class(object)パラメータobject − 検査対象となるオブジェクトです。クラスの内部で呼び出す場合は、このパラメータを省略できます。戻り値get_class()関数は、指定されたオブジェクトのクラス名を文字列として返します。引数がオブジェクトでない場合はFALSEを返します。クラス内部
-
PHPのget_object_vars()関数の使い方を徹底解説
PHPのget_object_vars()関数は、指定されたオブジェクトが持つプロパティを取得するための関数です。オブジェクト内で定義されているプロパティを、プロパティ名をキーとした連想配列の形式で返します。 構文 get_object_vars(object) パラメータ object − プロパティを取得したいオブジェクトのインスタンスを指定します。 戻り値 get_object_vars()関数は、指定されたオブジェクトの定義済みプロパティを連想配列として返します。まだ値が代入されていないプロパティについては、NULLが返されます。 なお、この関数をクラスの外部から呼び出した場合、取