2017-10-12 111 views
1

我有一个下面的问题:当我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()是好的我想,我会开始它,但我想知道这里发生了什么...

回答

0

我解决了这个问题 - 问题出在我的自动加载过程。我认为。也许。

说实话,我不知道什么是真的错了,但在我报废了我的自动加载类,并从头开始重新写的,错误信息消失,所以我认为它是自动加载机是有过错。

你的猜测和我一样好。

相关问题