簡體   English   中英

為什么當我 session_start() 時在我的對象上調用 __wakeup()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM