PHP:オブジェクト(クラス)をセッションで受け渡しする方法:serialize():シリアル化
PHP (55 items)
2005年02月18日
本格的にオブジェクト指向プログラミングができるようになりました。
これで、今までのベタな処理なコーディング
・・(処理毎に色んなphpが呼ばれてそこで全て処理を記述)・・から、
newって感じで、オブジェクトを生成するコーディングに変わってきます。
ASPなコーディングからJavaなコーディングに変わるとでも言いましょうか。。
まあ、細かいオブジェクト指向の話は置いておいて、
PHPにもあるセッション機能を使い、単なる文字列だけでなく、
オブジェクト自身をセッションに格納したり、
取り出したりできるのかという事ですが、これも簡単に出来るのです。
オブジェクトのシリアル化 - セッションでのオブジェクト
serialize() は、PHPで保存可能な全ての値のバイト ストリーム表現を有する文字列を返します。 unserialize() は、この文字列を使用して元の変数 値を再生することが可能です。オブジェクトを保存するためにシリアル化 を行うと、オブジェクトの全ての変数が保存されます。オブジェクトの関 数は保存されません。クラス名だけが保存されます。
もう、このマニュアルで充分ですが、以下参考ソース。
ポイントとしては、セッションへ格納の際は「serialize」を、
取り出す際は「unserialize」をかましてあげればいいという事ですね。
>serialize
>unserialize
○サンプル
Testクラスで作られる、testオブジェクトをセッションでやり取り。
A.phpからB.phpへとtestオブジェクトをセッションを介して引き継ぐ。
■Test.php
<?php
class Test {
var $id;
var $name;
function setUserid($id) {
$this->id = $id;
}
function setName($name) {
$this->name = $name;
}
function getId() {
return $this->id;
}
function getName() {
return $this->name;
}
}
?>
■A.php
<?php
require 'Test.php';
//testオブジェクトを生成
$test = new Test();
//testオブジェクトに値をセット
$test->.setId('001');
$test->.setName('ABC');
session_start();
//testオブジェクトをセッションに格納
$_SESSION['test'] = serialize($test);
?>
■B.php
<?php
require 'Test.php';
session_start();
//testオブジェクトをセッションから取り出す
$test = unserialize($_SESSION['test']);
//testオブジェクトの各値を出力
echo $test->.getId() . <br />;
echo $test->.getName() . <br />;
?>
■実行結果
001
ABC
※注意点
マニュアルにも書いていますが、
A.phpとB.phpでも先頭行に記述しているように、
やりとりするクラスを定義しているphpファイル(Test.php)は、
必ずインクルードしてやるという事ですね。。