What is the difference between new self and new static?
self refers to the same class whose method the new operation takes place in.
static in PHP 5.3's late static bindings refer to whatever class in the hierarchy which you call the method on.
In the following example, B inherits both methods from A. self is bound to A because it's defined in A's implementation of the first method, whereas static is bound to the called class.
class A {
public static function get_self() {
return new self();
}
public static function get_static() {
return new static();
}
}
1.
class B extends A {}
echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
2.
class B extends A {
public static function get_self() {
return new self();
}
}
echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A
See more explanation here
Post a Comment