Web Artisan Blog - ウェブ アルチザン ブログ

PHP:オブジェクト(クラス)をセッションで受け渡しする方法:serialize():シリアル化

PHP

2005年02月18日

アフィリエイトから企業サイト分析まで。訪問者の動きがまるわかりのアクセス解析サービス「リサーチアルチザンプロ」

LINEやSkypeみたいなビデオ通話がブラウザだけでできる!オンライン通話サービス「EZ-Interview - イージーインタビュー」

PHP5より、
本格的にオブジェクト指向プログラミングができるようになりました。

これで、今までのベタな処理なコーディング
・・(処理毎に色んな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)は、
必ずインクルードしてやるという事ですね。。

Web面接に最適。ブラウザだけでビデオ/音声通話ができるオンライン通話サービス。「EZ-Interview - イージーインタビュー」
訪問者録画機能も付いたシンプルで高機能なリアルタイムアクセス解析「リサーチアルチザンプロ」