- ベストアンサー
Cookieを使ってオブジェクトの引渡しはできるか?
- phpのアルバイトプログラマが、Cookieを使用してオブジェクトの引渡しを試みています。
- serializeしたオブジェクトをCookieに保存し、別のページでunserializeする方法を試みましたが、クラス間のキャストができないエラーが発生しました。
- オブジェクトをserializeする際、クラス名の情報が含まれているため、クラス定義をきちんと行えばunserializeしたオブジェクトを正しく扱うことができるかもしれません。
- みんなの回答 (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
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
serialize() はバイトストリーム表現を含むとある(→参考URL)ので、 きちんと cookie に保存されていないのではないかなあ。 base64encode() してから cookie に保存する、というのはどうでしょう? 勿論、unserialize() する前には、base64decode()ね。
お礼
迅速なご返事ありがとうございます.まだ,続きでいろいろ聞くかもしれませんが,よろしくお願いします.
補足
すみません,言葉足らずだったかもしれません.質問の意味がうまく伝わっていないようですが・・・. a-kumaさんのおっしゃる問題はまた別に発生するかもしれませんが,とりあえず, serialize() → Cookie → unserialize() という過程は正常に終了したとして,unserialize()で返ってきたオブジェクトを,きちんとClassA型として扱いたい(メソッド起動などを行いたい)のだが,どうすればいいのだろうか,というのが疑問点でした. というのも,serialize()では,オブジェクトのプロパティは保存されるが,メソッドは保存されない,とphpのリファレンスに明記してあるからです. 今日はバイトのほうには出ていないので,前記の例でb.php側にClassAの定義がある場合についてはまだ実験していませんが・・・・. 関係のない話ですが,phpのクラスって,同じクラス内のメソッドを呼び出すにはどうしたらいいんですか?. this->function_name(); ってやると,「そんな関数は知らん.」(多分そんな感じ)って言われるんですが・・・.
お礼
丁寧なご回答,本当にありがとうございます.今回の経験を生かして,次からはもう少しうまく質問したいと思います. ありがとうございます.
補足
ご回答ありがとうございます. > クラス宣言は別のファイルに書き出して、require でとりこむしか > ないですね。 これはやっております. > で、メンバーの数だけ、代入を繰り返すか、メンバー複写用のメソッドを > 定義しておく。 うーん,やっぱそうなりますか.そんなにたいしたコードではないと思うので,やってみます.それから, > > this->function_name(); > > $this->function_name ではないかな。 す,すみません.極めて初歩的ミスのようで・・・.申し訳ありませんでした.