Php 取消序列化()。。。函数spl_autoload_call()没有';t定义了调用它的类
我正在使用factory创建对象,并使用静态方法取消序列化此对象: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()
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: