Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 取消序列化()。。。函数spl_autoload_call()没有';t定义了调用它的类_Php_Kohana_Kohana 3 - Fatal编程技术网

Php 取消序列化()。。。函数spl_autoload_call()没有';t定义了调用它的类

Php 取消序列化()。。。函数spl_autoload_call()没有';t定义了调用它的类,php,kohana,kohana-3,Php,Kohana,Kohana 3,我正在使用factory创建对象,并使用静态方法取消序列化此对象: public static function factory($idText) { $fetchedObject = self::fetchStoredObject($idText); return $fetchedObject; } private static function fetchStoredObject($idText) { $fetchedText = DB::select()

我正在使用factory创建对象,并使用静态方法取消序列化此对象:

public static function factory($idText) {
    $fetchedObject = self::fetchStoredObject($idText);
    return $fetchedObject;
}

private static function fetchStoredObject($idText) {
    $fetchedText = DB::select()
                    ->from(table)
                    ->where('idText', '=', $idText)
                    ->execute()->as_array();
    if (!empty($fetchedText)) {
        return unserialize(base64_decode($fetchedText[0]['txtContent']));
    } else {
        return NULL;
    }
}
对象是通过以下方式创建的:

$text = Article::factory($idText);
但我得到了以下错误:

unserialize() [<a href='function.unserialize'>function.unserialize</a>]: 
Function spl_autoload_call() hasn't defined the class it was called for
为什么会发生这种错误

编辑

我的班级结构如下:

class Article {
    private $phpMorphy;
    private $words; //contains instances of class Word
    ...
    private function __construct($idText) {
        $this->initPhpMorphy(); // $this->phpMorphy gets reference to the object here
    }

    public function __sleep() {
        return Array(
            'rawText',
            'idText',
            'properties',
            'words',
            'links'
        );
    }

public function __wakeup() {
    $this->initPhpMorphy();
}
}

Word
类不包含对phpMorphy的引用作为自己的属性,而是在其方法中将其用作函数参数。 以下是序列化字符串的一部分:

" Article words";a:107:{i:0;O:4:"Word":10:{s:5:" * id";O:9:"phpMorphy":7:{s:18:" * storage_factory";O:25:

phpMorphy似乎是通过connectrion序列化到Word类的。我说的对吗?

您使用了什么版本的PHP?你把你的文章分类存放在哪里?尝试手动请求()。

您使用了什么版本的PHP?你把你的文章分类存放在哪里?手动尝试require()它。

发生错误的原因是,在序列化字符串中有一个对尚未包含的类的引用,因此会触发PHP自动加载机制来加载该类,但由于某些原因,此操作失败

调试步骤如下:

  • 标识序列化字符串中包含的类
  • 检查您是否有该类的代码
  • 确保可以通过自动加载加载此代码。或者,确保在取消序列化之前包含代码

  • 发生此错误的原因是,在序列化字符串中有一个对尚未包含的类的引用,因此会触发PHP自动加载机制来加载该类,但由于某些原因,此操作失败

    调试步骤如下:

  • 标识序列化字符串中包含的类
  • 检查您是否有该类的代码
  • 确保可以通过自动加载加载此代码。或者,确保在取消序列化之前包含代码

  • 多亏了斯文的建议,问题得以解决。Word类的对象(类文章的一部分)包含对phpMorphy类的引用(发生这种情况是因为我在创建Word实例时更改了参数顺序!)。

    由于Sven的建议,问题得到了解决。Word类的对象(类文章的一部分)包含对phpMorphy类的引用(这是因为我在创建Word实例时更改了参数顺序!)。

    导致问题的类名是phpMorphy。但是对该对象的引用存储在私有变量中。此变量不是包含在“\u sleep”函数返回的数组中的私有变量之一。那么,为什么这个变量会被序列化呢?显然,这个问题的上下文比您第一次告诉我们的要多。您不只是用对象序列化某些内容,还可以使用
    \u sleep
    -或者
    \u wakeup
    。这些方法可以包含解释问题的代码,因此请使用更多信息更新您的问题。此外,与我们共享序列化字符串(注意其中的机密信息!)。我更新了我的答案。提前谢谢你的帮助!导致问题的类名是phpMorphy。但是对该对象的引用存储在私有变量中。此变量不是包含在“\u sleep”函数返回的数组中的私有变量之一。那么,为什么这个变量会被序列化呢?显然,这个问题的上下文比您第一次告诉我们的要多。您不只是用对象序列化某些内容,还可以使用
    \u sleep
    -或者
    \u wakeup
    。这些方法可以包含解释问题的代码,因此请使用更多信息更新您的问题。此外,与我们共享序列化字符串(注意其中的机密信息!)。我更新了我的答案。提前谢谢你的帮助!
    " Article words";a:107:{i:0;O:4:"Word":10:{s:5:" * id";O:9:"phpMorphy":7:{s:18:" * storage_factory";O:25: