• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SESSIONとGLOBALSとCLASSについて)

SESSIONとGLOBALSとCLASSについて

このQ&Aのポイント
  • A.phpでクラスをグローバル変数に代入し、それをセッションに登録し、B.phpで取り出すことは可能でしょうか?取り出し方がわからない場合はどうすればよいでしょうか?
  • A.phpではクラスをグローバル変数に代入し、それをセッションに登録します。B.phpでセッションからクラスを取り出す方法がわからない場合は、別の方法を教えてください。
  • A.phpでクラスをグローバル変数に代入し、それをセッションに登録し、B.phpでクラスを取り出すことはできるのでしょうか?取り出し方がわからない場合は、他の方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.3

オブジェクトのままセッションに格納することも出来ますよ。 その場合は自動的に文字列に変換/文字列から復元されます。 注意点 (1) PHPで一般的に用いられる「serialize」「unserialize」関数 セッションの管理に使われる「session_encode」「session_decode」関数 これらは全くの別物です。 (2) オブジェクトを格納した場合、 他のファイルでsession_start関数をコールする前に 必ず「require_once」等でクラス定義の情報を読み込む必要があります。 session_startの "前に" というのがミソです。 【XXX.php】 <?php class XXX { ____ ____private $data; ____ ____public function __construct($data) { ________$this->data = $data; ____} ____ ____public function getData($data) { ________return $this->data; ____} ____ } 【a.php】 <?php require_once('XXX.php'); session_start(); $_SESSION['xxx'] = new XXX('test'); /* $instance = new XXX('test'); $_SESSION['xxx'] = $instance; としても全く同じ意味 (オブジェクトの代入は自動的に参照になるため) */ 【b.php】 <?php require_once('XXX.php'); session_start(); if (!isset($_SESSION['xxx'])) { ____echo 'No Object'; } else { ____echo $_SESSION['xxx']->getData(); }

super-zero-x
質問者

お礼

原因がわかりましたので ご報告させてください。 ■OK $_SESSION['XXX'] = new XXX_CLASS(); $_SESSION['XXX']->setdata('abc'); ■NG $xxx = new XXX_CLASS(); $xxx->setdata('abc'); $_SESSION['XXX'] = $xxx; といったようになるようです。 サーバーはロリポップを使用しています。 設定の問題なのかな。と思いつつこの件はクローズしたいと思います。 ご丁寧にありがとうございました!

super-zero-x
質問者

補足

To_aru_User様 ご回答ありがとうございます。 さっそく、試みたのですが、以下のようなエラーとなります、、、 Fatal error: Call to a member function getData() on a non-object in 通常の変数でセッション受け渡し⇒OK クラスのセッション受け渡し  ⇒NG もちろん、includeは実施しています。 原因としてはなんでしょうか。。。

その他の回答 (2)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

serialize 関数で オブジェクトの現在プロパティ値を一連の文字列にすれば、$_SESSION配列にも保持出来ます。格納元変数がローカルか global かには関係ない。 unserialize するには、クラス定義が必要ですので、自前で作ったクラスなら require_once class_file は必須 http://jp.php.net/manual/ja/language.oop5.serialization.php

noname#244856
noname#244856
回答No.1

include http://www.php.net/manual/ja/function.include.php require、include_once、require_onceもチェック。

関連するQ&A

専門家に質問してみよう