2017-10-12 6 views
1

私は以下の問題があります:session_start()を実行すると、__wakeup()がオブジェクトで呼び出されるのはなぜですか?

私はシングルトンパターンのクラスを使用しています。私は__wakeup()をそのような理由で非公開にしました。そのオブジェクトはセッションに格納されません。私はにsession_start()を呼び出すと、私はこのエラーメッセージが表示されます。Session.phpの

Warning: Invalid callback MySingletonClass::__wakeup, cannot access private method MySingletonClass::__wakeup() in Session.php on line 32 

ライン32は、読み取ります

30 public function startSession() { 
31  if (session_status() == PHP_SESSION_NONE) { 
32   session_start(); 
33  } 
34 } 

は、私がセッションに格納されているオブジェクトは、シリアル化され、シリアライズされていることを理解しますが、MySingletonClass実際には、$ _SESSION配列は空です。

私はおそらく、いつかそれを偶然にもセッションに保存してそこに座っていると思っていましたが、$ _SESSIONデータをすべてクリアしても、セッションを破棄し、サーバー上のセッションファイルを削除し、 ...

さらに奇妙なのは、私が正確に同じシングルトンパターンを使用し、private __wakeup()を持っているいくつかの異なるクラスを使用することです。そのちょうど1つ。

何が起こっていますか?私のコードは非常識なPHPが混乱しているのですか?

[編集] 私は何かを考え出し:

をこのエラーはMySingletonClassが定義した後(そう、その定義を含むファイルは、/必要な含まれた後)session_start()が呼び出された場合はどうなりますが、session_start()がある場合はしません他のファイルがインクルード/必要とされる前に、スクリプト実行の最初に移動しました。

誰でも説明がありますか? session_start()先に持つことは、私は推測する罰金ですが、私はとにかくそれを開始するだろうが、私はここで何が起こっているか知りたいのですが...

答えて

0

私はこの問題を解決 - 問題は、私のオートローディング手順にありました。おもう。おそらく。

は、私は本当に間違っていたものを見当もつかないを持っていませんが、私は私のオートローダクラスを廃棄し、最初からそれを再書いた後に、エラーメッセージが私はそれが故障したオートローダたと仮定ので、姿を消し、正直に言うと。

あなたの推測は私のものと同じくらい良いです。

関連する問題