1. ホーム
  2. php

[解決済み] 新しい自分vs.新しい静止画

2022-03-18 09:57:07

質問

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

とはどのような違いがあるのでしょうか? new selfnew static ?

解決方法は?

<ブロッククオート

同じ結果になるのでしょうか?

そうでもないです。PHP 5.2での回避策は知らないのですが。

とはどのような違いがあるのでしょうか? new selfnew static ?

self は、その中の同じクラスを参照しています。 new というキーワードが実際に書かれています。

static PHP 5.3 の後期静的バインディングでは、メソッドをコールした階層内の任意のクラスを参照します。

次の例では B から両方のメソッドを継承しています。 A . また self の呼び出しをバインドしています。 A で定義されているからです。 A は最初のメソッドの実装であるのに対し static は呼び出されたクラスにバインドされています (また get_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