首页 > 解决方案 > PHP 7.4 及更高版本的 WDDX 函数替换

问题描述

我们使用 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'];
}

有谁知道我该如何解决这个问题?

标签: phpxmlxml-parsingwddx

解决方案


推荐阅读