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
。
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