新しい自分と新しい静的質問する

新しい自分と新しい静的質問する

PHP 5.3 ライブラリを PHP 5.2 で動作するように変換しています。 主な障害は、 のような遅延静的バインディングの使用ですreturn new static($options);。これを に変換すると、return new self($options)同じ結果が得られますか?

new selfとの違いは何ですかnew static?

ベストアンサー1

同じ結果が得られますか?

そうではありません。ただし、PHP 5.2 の回避策は知りません。

new selfとの違いは何ですかnew static?

selfキーワードが実際に記述されているのと同じクラスを参照しますnew

staticPHP 5.3 の遅延静的バインディングでは、メソッドを呼び出した階層内の任意のクラスを参照します。

次の例では、Bは から両方のメソッドを継承しますA。呼び出しはの最初のメソッドの実装で定義されているため にselfバインドされますが、 は呼び出されたクラスにバインドされます( も参照)。AAstaticget_called_class())。

class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }
}

class B extends A {}

echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A

おすすめ記事