我正在浏览Wordpress核心,我发现了这个功能:
function unserialize ( $data ) {
return unserialize( $data );
}
首先,我什至不明白为什么要定义反序列化,因为它是一个本机 php 函数。 其次,自从它被递归定义而没有任何条件来阻止无限递归以来,这里到底发生了什么?
扔给我一根骨头。 我是这方面的新手。
这必须是类中的方法定义,例如:
class SomeClass
{
function unserialize($data)
{
return unserialize($data);
}
// ...
}
否则,您会收到一个致命错误,指出您无法重新声明unserialize()
。
它所做的只是向类添加一个unserialize()
方法。然后,此方法调用 PHP 中的本机unserialize()
函数。看起来很傻,但是,我没有写Wordpress。
我相信我找到了有问题的方法:wp-includes/rss.php
(第 783 行)。这确实是RSSCache
类的方法。
我想他们将来可能想编写自己的序列化例程和/或RSSCache
的某些子类有自己的serialize()
和unserialize()
。
NullUserException 是正确的。就解释而言,这是我最好的镜头。
例如,假设有一天 PHP 决定弃用反序列化函数。突然之间,你必须将代码中可以找到"unserialize()"的任何地方更改为新的函数名称,并可能进行一些重写。但是,如果您使用自己的函数,例如WordPress的方式,您所要做的就是更改一次反序列化函数的版本,而不是在所有地方使用它。