1

我在现有应用程序中有以下代码:

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() 下。

4

1 回答 1

2

因为您没有包含专门针对第二个请求的类规范,并且没有定义__autoload(或首选spl_autoload_register())可以找到它。类定义不与对象数据一起存储,您需要在检索时加载或自动加载,或显式定义:参见注释unserialize(如果存储在 php 请求之外,通常会通过函数变量):

如果在反序列化期间应实例化未定义的类,则可以设置将调用的回调函数。(以防止获得不完整的对象“__PHP_Incomplete_Class”。)使用您的 php.ini、ini_set() 或 .htaccess 来定义“unserialize_callback_func”。每次应实例化未定义的类时,都会调用它。要禁用此功能,只需清空此设置。

于 2013-10-15T07:46:16.150 回答