4

Wordpressコアを調べていたところ、次の機能が見つかりました。

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

まず、ネイティブのphp関数以降にunserializeが定義されている理由すらわかりません。第二に、無限再帰を停止する条件なしに再帰的に定義されているので、ここで何が起こっているのでしょうか。

私に骨を投げてください。私はこのようなものの初心者です。

4

2 に答える 2

3

これは、クラスのメソッド定義である必要があります。例:

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

    // ...
}

そうしないと、再宣言できないという致命的なエラーが発生しますunserialize()

unserialize()クラスにメソッドを追加するだけです。unserialize()次に、このメソッドはPHPのネイティブ関数を呼び出します。かなりばかげているようですが、その後、私はWordpressを書きませんでした。


問題の方法を見つけたと思います: wp-includes/rss.php(783行目)。そしてそれは確かにRSSCacheクラスのメソッドです。

将来、独自のシリアル化ルーチンを作成したい場合や、のサブクラスにRSSCache独自のserialize()andが含まれている可能性があると思いunserialize()ます。

于 2012-10-04T16:58:08.147 に答える
1

NullUserExceptionはそれを正しく持っています。説明の限りでは、これが私のベストショットです。

たとえば、ある日、PHPがunserialize関数を廃止することを決定したとします。突然、コード内の「unserialize()」を見つけることができるすべての場所を新しい関数名に変更し、場合によっては書き直しを行う必要があります。ただし、WordPressのように独自の関数を使用する場合は、unserialize関数のバージョンを一度変更するだけで、使用するすべての場所で変更する必要はありません。

于 2012-10-04T17:01:50.050 に答える