
ご教授お願いいたします。
以下のこういったことは可能でしょうか?
■質問
「A.php」で
クラスをグローバル変数に代入し、それをセッションに登録し、「B.php」で取り出すことは可能でしょうか。
⇒可能な場合
「B.php」でどうやって取り出せばよいでしょうか。
⇒不可能な場合
「A.php」から「B.php」へクラスを渡したいのですが、どうすればよいでしょうか?
■例
「A.php」というソースで
クラスをグローバル変数に代入し、セッションに代入する。
○例(A.php):
$xxc = new XXX_XXX_CLASS();
$xxc->setA('aaa');
$GLOBALS['@XXX_XXX_CLASS'] = $xxc;
session_start();
// セッションにセット
$_SESSION['aaa'] = $GLOBALS['@XXX_XXX_CLASS'];
// セッションのクローズ
session_write_close();
○例(B.php):
session_start();
取り出し方:1
$xxc = $_SESSION["aaa"]; // ←取り出せなかった。
$xxc->getA();
取り出し方:2
$xxc = new XXX_XXX_CLASS();
$xxc = $_SESSION["aaa"]; // ←取り出せなかった。
$xxc->getA();
取り出し方:3
ほかに取り出し方がありましたらご教授お願いいたします。
グローバル変数を通さないやり方もしてみたのですが、そちらでも出来ませんでした。
以上、よろしくお願いいたします。
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();
}
この回答への補足
To_aru_User様
ご回答ありがとうございます。
さっそく、試みたのですが、以下のようなエラーとなります、、、
Fatal error: Call to a member function getData() on a non-object in
通常の変数でセッション受け渡し⇒OK
クラスのセッション受け渡し ⇒NG
もちろん、includeは実施しています。
原因としてはなんでしょうか。。。
原因がわかりましたので
ご報告させてください。
■OK
$_SESSION['XXX'] = new XXX_CLASS();
$_SESSION['XXX']->setdata('abc');
■NG
$xxx = new XXX_CLASS();
$xxx->setdata('abc');
$_SESSION['XXX'] = $xxx;
といったようになるようです。
サーバーはロリポップを使用しています。
設定の問題なのかな。と思いつつこの件はクローズしたいと思います。
ご丁寧にありがとうございました!
No.2
- 回答日時:
serialize 関数で オブジェクトの現在プロパティ値を一連の文字列にすれば、$_SESSION配列にも保持出来ます。
格納元変数がローカルか global かには関係ない。unserialize するには、クラス定義が必要ですので、自前で作ったクラスなら require_once class_file は必須
http://jp.php.net/manual/ja/language.oop5.serial …
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのセッションについて
-
セッションとGCに付いての検証
-
セッションとヘッダーの順序に...
-
PHPでpaypal支払後のセッション...
-
セッションの変数の受渡しについて
-
IE11でページ遷移時にセッショ...
-
sessionが分かりにくいです
-
PHPのセッションについて。
-
拡張子php画像をjpg画像等に変...
-
ファイル名は、数字の「0」(...
-
さくらサーバーにて、phpからメ...
-
onedrive にexcelファイルをア...
-
fsockopenなどについて
-
CFileDialogの最初のディレクト...
-
iframeからのアクセスか、ブラ...
-
CSVファイルのダウンロード
-
【PHP】Googleアドセンスが出力...
-
rmdirでフォルダが消せません
-
MAMPのユーザー名とパスワード
-
バッチファイルで特定ファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSION 有効期限をブラウザ...
-
PHP session_destroyとsession...
-
セッションとヘッダーの順序に...
-
ドコモのセッション機能について
-
PHPのセッションについて。
-
PHP 文字列 操作
-
以下プログラム(php)のバ...
-
sessionが分かりにくいです
-
セッションの変数の受渡しについて
-
session_start();について
-
セッションとGCに付いての検証
-
携帯サイトのセッションについて
-
さくらサーバーでsessionが使え...
-
セッションファイルの場所
-
phpでのログアウトについて
-
PHPでpaypal支払後のセッション...
-
セッション機能が使えない
-
セッションが変数が取得できません
-
PHPからリアルタイムにデータを...
-
セッション管理について
おすすめ情報