PHP 内存缓存的存储值反序列化返回__PHP_Incomplete_Class


PHP Memcached unserialization of stored value returns __PHP_Incomplete_Class

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

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

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

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