我在现有应用程序中有以下代码:
if(!($article = $this->memcached->get('article_'.$articleId))) {
$article = $this->model->ArticleManager()->getStoryById($articleId);
$this->memcached->set('article_'.$articleId, $article);
}
不,当从ArticleManager检索$ article时它是正确的类型,它确实是命名空间对象\ Site \ Articles \ Article()。但是,当此值存储在memcached中并在下一页上返回时,该对象的类型为__PHP_Incomplete_Class。我知道它意味着找不到原来的课程,但为什么......?
此调用所在的文件位于名称空间\ Site \ index \ default_Read_Controller()下。
答案 0 :(得分:2)
因为您没有专门为第二个请求包含类规范,并且没有定义__autoload
(或首选spl_autoload_register()
)可以找到它。类定义不与对象数据一起存储,您需要在检索时加载或autoloadable或明确定义:请参阅unserialize
处的备注(如果存储,则通常会检查函数变量)在php请求之外):
如果在反序列化期间应该实例化未定义的类,则可以设置将被调用的回调函数。 (以防止获取不完整的对象“__PHP_Incomplete_Class”。)使用您的php.ini,ini_set()或.htaccess来定义'unserialize_callback_func'。每次都应该实例化一个未定义的类,它将被调用。要禁用此功能,请清空此设置。