2012-10-04 31 views
4

我一直在尋找通過WordPress的核心,我發現這個功能:爲什麼反序列化嵌套在Wordpress核心中的另一個反序列化函數中?

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

首先,我甚至不明白爲什麼反序列化一直以來是原始的PHP函數定義。其次,世界在這裏發生了什麼,因爲它遞歸地定義,沒有任何條件停止無限遞歸?

把我扔一根骨頭。我是這個東西的新手。

+0

是一類或獨立內的功能? –

+2

這是一個類中的方法定義。 – NullUserException

+2

我的標準評論是你不應該質疑如何運作的語言。那條路就是瘋狂。 –

回答

3

那一定是一個類的方法定義,如:

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

    // ... 
} 

否則你會得到一個致命的錯誤說你不能重新聲明unserialize()

它所做的就是增加一個unserialize()方法的類。此方法然後在PHP中調用本地unserialize()函數。似乎很愚蠢,但後來,我沒有寫Wordpress。


我相信我發現有問題的方法:wp-includes/rss.php(線783)。這實際上是RSSCache類的一種方法。

我想這是可能的,他們可能需要編寫自己的串行化例程在未來和/或RSSCache一些子類都有自己的serialize()unserialize()

+0

爲未來的自定義序列化的計劃可能是最有可能的情況。據Trac介紹,自2004年12月19日以來,它一直在那裏,並且包含在文件的初始版本中。 (再次,根據Trac)理由很可能會在時間的流逝中流失。 – EPB

+0

謝謝大家。那些猜測類定義的人是對的。我沒有意識到它,但是有一個類定義的開始,從反序列化函數代碼開始有幾行。所以這是一個用於調用本地函數的類方法。謝謝! – James

1

NullUserException有它的權利。就解釋而言,這是我的最佳鏡頭。

例如,假設1天PHP決定棄用反序列化功能。突然之間,你必須在你的代碼中找到「unserialize()」的地方改變一個新的函數名稱,並且可能做一些重寫。但是,如果您使用自己的功能(例如WordPress的方式),則只需更改一次反序列化函數的版本,而不是使用它的任何位置。

+0

所以他們重寫了所有的本地php功能? :) – Tarek

+0

他們必須已經忘記了所有其他的PHP功能! – AlexP