我们使用 WDDX_serialize 和 WDDX_unserialize 函数,但从 PHP 7.4 开始不再支持这些函数。因此,我们在基于 PHP 7.4 的服务器上尝试了 Pear 的 WDDX 部分的源代码,但我们不想安装整个 PEAR 包以包含在我们的产品中。
https://pear.php.net/package/XML_Parser2
https://pear.php.net/package/XML_Wddx
当我试图反序列化时,我偶然发现了一个通过引用初始化的类......呃......
$t = &new XML_Wddx;
显然,PHP 7.4 不接受这一点,所以我删除了 & 符号。
我使用了 XML_Parser2(因为 XML_Parser 被它取代了)和 XML_wddx,下载了源代码并用测试代码解压缩了类。似乎 XML_wddx 使用了旧的 XML_Parser,它的引用被我替换为对 XML_Parser2 的引用。
但是下一个问题更严重:我在两个类的任何地方都找不到函数 XML_Parser()。对 $t->XML_Parser() 的调用是从反序列化函数完成的。
static function deserialize($data)
{
if (function_exists('wddx_deserialize')) {
return wddx_deserialize($data);
}
//!! Constructor by reference ???
//$t = &new XML_Wddx;
$t = new XML_Wddx;
//!! This function DOES NOT EXIST in XML_Parser and XML_wddx, so PHP says BOOM !
$t->XML_Parser();
$t->parseString($data);
return $t->result['data'];
}
有谁知道我该如何解决这个问题?