我有一個下面的問題:當我session_start()時,爲什麼在我的對象上調用__wakeup()?
我使用一個類與單例模式,我做了__wakeup()私人出於這個原因。該對象在任何時候都不會存儲在會話中。當我調用session_start(),我得到這個錯誤信息:
Warning: Invalid callback MySingletonClass::__wakeup, cannot access private method MySingletonClass::__wakeup() in Session.php on line 32
線session.php文件的32讀:
30 public function startSession() {
31 if (session_status() == PHP_SESSION_NONE) {
32 session_start();
33 }
34 }
我明白,存儲在會話對象被序列化和反序列化,但MySingletonClass永遠不會存儲在會話中...實際上,$ _SESSION數組是空的。
我在想,也許我有時會將它存儲在會話中,並且它會坐在那裏,但即使我清除所有$ _SESSION數據,銷燬會話,刪除服務器上的會話文件,重新啓動Apache並開始新會話...
什麼是更奇怪的是,我使用幾個不同的類,使用完全相同的單身模式,有私人__wakeup(),他們從來沒有提出這個問題。它只是這一個。
這是怎麼回事?我的代碼是如此瘋狂的PHP弄糊塗了嗎?
[編輯] 我想通一些東西:
這個錯誤發生,如果session_start()
被調用後,MySingletonClass
已被定義(所以之後包含其定義的文件已被列入/所需的),但不若session_start()
是在包含/需要任何其他文件之前,將其移至腳本執行的最初階段。
有沒有人有解釋嗎?之前有session_start()
是好的我想,我會開始它,但我想知道這裏發生了什麼...