【问题标题】:PHP - The script tried to execute a method or access a property of an incomplete objectPHP - 脚本试图执行方法或访问不完整对象的属性
【发布时间】:2012-02-02 13:32:25
【问题描述】:

我正在使用 CI,我有一个 UserModel,它根据登录信息选择用户并设置一个 userVO 并将这个 userVO 添加到这样的会话中:

$this->session->set_userdata('user', $userVO);

当我尝试访问此会话时,它会返回此错误:

Message: main() [function.main]: The script tried to execute a method 
or access a property of an incomplete object. Please ensure that the 
class definition "UserVO" of the object you are trying to operate on 
was loaded _before_ unserialize() gets called or provide a __autoload() 
function to load the class definition.

我找到了一个“解决方案”,我需要 CI 在会话类之前加载 UserVO 类并且它可以工作。

问题是我有很多 os VO 类,我会在会话中需要它们,自动加载它们是一件坏事,因为我不会同时需要它们。

有什么解决办法吗?

提前感谢您的帮助。

【问题讨论】:

  • I have lots os VO classes and I'll need them inside the session 旁注:请记住,CI 的会话是 cookie,因此仅限于 4Kb 左右的空间。当然,除非你使用数据库。
  • @DamienPirsy 感谢您的提示,但这不是问题 =]

标签: php session object codeigniter-2


【解决方案1】:

您正在将类的一个实例保存到会话中。为了恢复它,您首先需要加载它作为实例的基类。您可能有很多 VO 类的“实例”,而不是很多 VO 类。您只需要加载具有类声明的文件即可。

类实例实际上只包含基类的变化,而不是整个类。所以它需要底层类知道“默认值”是什么。

【讨论】:

  • 感谢您的回答。我遇到了同样的错误消息,这里的原因是 APC 显然仍然持有同时发生变化的对象的副本。清除 APC 的缓存“修复”了错误消息。
猜你喜欢
  • 2014-01-06
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
相关资源
最近更新 更多