[PHP]オブジェクトをセッション変数で引き継ぐ

クラスを作れる様になったので、今度はオブジェクトを遷移先へ引き継げる様になりたいと思います。

どうすればオブジェクトを遷移先で参照できるのかと調べたところ、セッション変数を利用すればできちゃうみたいです。

セッション変数を使ってみよう

セッション変数を利用すると、サーバーに値を保存できるそうです。凄い。便利。

早速使ってみます。まずはセッション変数に書き込んでみます。

<?php
include(dirname(__FILE__)."/session_object.class.php");
session_start();

$object = new SessionObject();
$object->set("testだよ");

$_SESSION["object"] = $object;

header("Location: ".(empty($_SERVER["HTTPS"])?"http://":"https://").$_SERVER["HTTP_HOST"].str_replace(basename($_SERVER['PHP_SELF']),"echo.php",$_SERVER['PHP_SELF']));
?>

ポイントは以下。

  • session_start関数でセッションの開始
  • session_startする前にクラスを定義する
  • $_SESSIONがセッション変数が入ってる配列になっている

因みにsession_object.class.phpはこんな感じ。

<?php
class SessionObject
{
 private $var;
 public function set($var)
 {
 $this->var = $var;
 }
 public function echoVar()
 {
 echo $this->var;
 }
}
?>

値をセットして、echoVar関数でechoするだけのシンプルな物です。

write.phpから遷移するecho.phpはこんな感じ。

<?php
include(dirname(__FILE__)."/session_object.class.php");
session_start();
if(empty($_SESSION["object"]))
{
 echo "sessionに情報が無いよ。";
}
else
{
 $_SESSION["object"]->echoVar();
 session_destroy();
}
?>

セッション変数を参照して、オブジェクトがあればそのオブジェクトのechoVar関数を実行しています。無ければその旨を表示しています。

本当はセッション変数の中身がSessionObjectクラスのオブジェクトかを確認すべきなんでしょうけど、今回は割愛。

ポイントは以下です。

  • 受け取り側でもsession_start関数でセッションの開始を行なう
  • session_destroy関数でセッション変数を削除する
testだよ
sessionに情報が無いよ。

セッション変数が使われてます。素敵。

余談ですが

includeを絶対パスで指定する様にしました。

write.phpを書いている際にheader関数について調べていたのですが、「header関数はLocationを絶対パスで指定しなさいよ」というルールがあるそうで……。

じゃあ、どうやって相対パスの代わりに絶対パスを作るかと調べている中で、こんな記事に辿り着きました。

[PHP]require(require_once)するときは必ず絶対パスを使いましょう
http://dqn.sakusakutto.jp/2013/05/php_require_once_include_once_include_path.html

処理速度が速くなるそうです。素晴らしい。

因みに相対パスの代わりに絶対パスを作る方法はいまいち良いのが見付からず(ローカル環境で試してるからでしょうか?)今回はwrite.phpの10行目の形に強引にまとまりました。

んー、このサンプルでは直書き指定すれば良いんですけど。今作ってる物でheader関数を使いたかったので。

もっとスマートな書き方があれば良いのですが。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>