![](/img/trans.png)
[英]Why does my PHP file stop executing when I use session_start()?
[英]Why is __wakeup() called on my object when I session_start()?
我有以下問題:
我使用了一個帶有單例模式的類,因此我將 __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 被搞糊塗了?
[編輯] 我想出了一些事情:
如果在定義MySingletonClass
之后調用session_start()
會發生此錯誤(因此在包含/需要包含其定義的文件之后),但如果session_start()
移動到腳本執行的最開始,在任何其他文件之前,則不會發生此錯誤包括/需要。
有人在這里有解釋嗎? 有session_start()
早點是好的,我想,無論如何我都會啟動它,但我想知道這里發生了什么......
我解決了這個問題 - 問題出在我的自動加載程序中。 我認為。 也許。
老實說,我不知道到底出了什么問題,但是在我取消了自動加載器類並從頭開始重新編寫之后,錯誤消息消失了,所以我認為是自動加載器出了問題。
你的猜測和我的一樣好。
剛剛有同樣的問題,PHPUnit 5.7.27。
就我而言,backupGlobals 設置為“true”。 在我的 phpunit.xml 中將它設置為 false,修復它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.