-PR-
解決済み

Cookieを使ってオブジェクトの引渡しはできるか?.

  • 困ってます
  • 質問No.63140
  • 閲覧数242
  • ありがとう数6
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 60% (28/46)

 phpを勉強中の一アルバイトプログラマです.いろいろ弄くってみてよくわからないところがあるのですが,ひとつ質問させていただきたいと思います.

 あるページから,別のページへオブジェクトを引き渡したいと思いました.一度ブラウザを終了しても引き続いて扱えるようにしたいと思っていたので,cookieを使って次のようにすることにしました.

a.php:
$obj = new ClassA();
setCookie( "cookie", serialize($obj), mktime("2010/8/1 00:00:00") );

 マニュアルによるとserializeしたオブジェクトはプロパティの値しか保存されない,ということですので,勝手に推測して,

b.php:
$obj = (ClassA)unserialize($cookie);

 としたところ,b.phpでparse errorが起こります.どうやらphpではクラス間のキャストができなさそうだ,というのはわかりますが,そうすると,処理の流れの中で一貫してひとつのオブジェクトを扱いたい場合,どのようにすればよいのでしょうか?.

 ・・・家に帰ってきてから気が付いたのですが,オブジェクトをserializeしたstringには,クラス名の情報が含まれているようです.ということは,ひょっとしてクラス定義さえきっちりしておけばunserializeしたオブジェクトもきちんとクラスのインスタンスとしてあつかえるのか?.
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

> きちんとClassA型として扱いたい(メソッド起動などを行いたい)の
  ...
> メソッドは保存されない,とphpのリファレンスに明記してある

ああ、そうですね。

クラス宣言は別のファイルに書き出して、require でとりこむしか
ないですね。

で、メンバーの数だけ、代入を繰り返すか、メンバー複写用のメソッドを
定義しておく。

require 'class_a.inc';

$obj_saved = unserialize($cookie);
$obj = new ClassA();

$obj->copy_from($obj_saved);



> this->function_name();

$this->function_name ではないかな。

http://www.zuien.or.jp/develop/ja-manual/php3/oop.html
補足コメント
stanaka

お礼率 60% (28/46)

 ご回答ありがとうございます.

> クラス宣言は別のファイルに書き出して、require でとりこむしか
> ないですね。

 これはやっております.

> で、メンバーの数だけ、代入を繰り返すか、メンバー複写用のメソッドを
> 定義しておく。

 うーん,やっぱそうなりますか.そんなにたいしたコードではないと思うので,やってみます.それから,

> > this->function_name();
>
> $this->function_name ではないかな。

 す,すみません.極めて初歩的ミスのようで・・・.申し訳ありませんでした.
投稿日時 - 2001-04-13 20:23:59
お礼コメント
stanaka

お礼率 60% (28/46)

 丁寧なご回答,本当にありがとうございます.今回の経験を生かして,次からはもう少しうまく質問したいと思います.
 ありがとうございます.
投稿日時 - 2001-04-13 20:33:31
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

serialize() はバイトストリーム表現を含むとある(→参考URL)ので、
きちんと cookie に保存されていないのではないかなあ。

base64encode() してから cookie に保存する、というのはどうでしょう?

勿論、unserialize() する前には、base64decode()ね。
補足コメント
stanaka

お礼率 60% (28/46)

 すみません,言葉足らずだったかもしれません.質問の意味がうまく伝わっていないようですが・・・.

 a-kumaさんのおっしゃる問題はまた別に発生するかもしれませんが,とりあえず,

 serialize() → Cookie → unserialize()

 という過程は正常に終了したとして,unserialize()で返ってきたオブジェクトを,きちんとClassA型として扱いたい(メソッド起動などを行いたい)のだが,どうすればいいのだろうか,というのが疑問点でした.

 というのも,serialize()では,オブジェクトのプロパティは保存されるが,メソッドは保存されない,とphpのリファレンスに明記してあるからです.
 今日はバイトのほうには出ていないので,前記の例でb.php側にClassAの定義がある場合についてはまだ実験していませんが・・・・.



 関係のない話ですが,phpのクラスって,同じクラス内のメソッドを呼び出すにはどうしたらいいんですか?.

 this->function_name();

 ってやると,「そんな関数は知らん.」(多分そんな感じ)って言われるんですが・・・.
投稿日時 - 2001-04-13 13:53:21
お礼コメント
stanaka

お礼率 60% (28/46)

 迅速なご返事ありがとうございます.まだ,続きでいろいろ聞くかもしれませんが,よろしくお願いします.
投稿日時 - 2001-04-13 14:05:12


このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ