• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cookieを使ってオブジェクトの引渡しはできるか?.)

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

このQ&Aのポイント
  • phpのアルバイトプログラマが、Cookieを使用してオブジェクトの引渡しを試みています。
  • serializeしたオブジェクトをCookieに保存し、別のページでunserializeする方法を試みましたが、クラス間のキャストができないエラーが発生しました。
  • オブジェクトをserializeする際、クラス名の情報が含まれているため、クラス定義をきちんと行えばunserializeしたオブジェクトを正しく扱うことができるかもしれません。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> きちんと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
質問者

お礼

 丁寧なご回答,本当にありがとうございます.今回の経験を生かして,次からはもう少しうまく質問したいと思います.  ありがとうございます.

stanaka
質問者

補足

 ご回答ありがとうございます. > クラス宣言は別のファイルに書き出して、require でとりこむしか > ないですね。  これはやっております. > で、メンバーの数だけ、代入を繰り返すか、メンバー複写用のメソッドを > 定義しておく。  うーん,やっぱそうなりますか.そんなにたいしたコードではないと思うので,やってみます.それから, > > this->function_name(); > > $this->function_name ではないかな。  す,すみません.極めて初歩的ミスのようで・・・.申し訳ありませんでした.

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

serialize() はバイトストリーム表現を含むとある(→参考URL)ので、 きちんと cookie に保存されていないのではないかなあ。 base64encode() してから cookie に保存する、というのはどうでしょう? 勿論、unserialize() する前には、base64decode()ね。

参考URL:
http://uk.php.net/manual/ja/function.serialize.php
stanaka
質問者

お礼

 迅速なご返事ありがとうございます.まだ,続きでいろいろ聞くかもしれませんが,よろしくお願いします.

stanaka
質問者

補足

 すみません,言葉足らずだったかもしれません.質問の意味がうまく伝わっていないようですが・・・.  a-kumaさんのおっしゃる問題はまた別に発生するかもしれませんが,とりあえず,  serialize() → Cookie → unserialize()  という過程は正常に終了したとして,unserialize()で返ってきたオブジェクトを,きちんとClassA型として扱いたい(メソッド起動などを行いたい)のだが,どうすればいいのだろうか,というのが疑問点でした.  というのも,serialize()では,オブジェクトのプロパティは保存されるが,メソッドは保存されない,とphpのリファレンスに明記してあるからです.  今日はバイトのほうには出ていないので,前記の例でb.php側にClassAの定義がある場合についてはまだ実験していませんが・・・・.  関係のない話ですが,phpのクラスって,同じクラス内のメソッドを呼び出すにはどうしたらいいんですか?.  this->function_name();  ってやると,「そんな関数は知らん.」(多分そんな感じ)って言われるんですが・・・.

関連するQ&A