为什么unserialize嵌套在Wordpress核心中的另一个unserialize函数中?

时间:2012-10-04 16:53:06

标签: php wordpress serialization recursion

我正在浏览Wordpress核心,我发现了这个功能:

function unserialize ( $data ) {
    return unserialize( $data );
}

首先,我甚至不理解为什么unserialize已经被定义,因为它是一个原生的php函数。其次,世界上发生了什么,因为它的递归定义没有任何条件来阻止无限递归?

扔给我一根骨头。我是新手。

2 个答案:

答案 0 :(得分:3)

这必须是类中的方法定义,例如:

class SomeClass
{
    function unserialize($data) 
    { 
        return unserialize($data);
    }

    // ...
}

否则,您将收到致命错误,指出您无法重新声明unserialize()

它只是向一个类添加unserialize()方法。然后,此方法在PHP中调用本机unserialize()函数。看起来很傻,但后来,我没有写Wordpress。


我相信我找到了有问题的方法:wp-includes/rss.php(第783行)。它确实是RSSCache类的一种方法。

我想他们可能希望将来编写自己的序列化例程和/或RSSCache的某些子类有自己的serialize()unserialize()

答案 1 :(得分:1)

NullUserException是正确的。至于解释,这是我最好的镜头。

例如,假设有一天PHP决定弃用unserialize函数。突然之间你必须改变你可以在代码中找到“unserialize()”到新函数名称,并可能进行一些重写。但是,如果您使用自己的函数(如WordPress的方式),您只需更改一次unserialize函数的版本,而不是在任何地方使用它。