Use self:: or __class__ a static reference to the current class, depending on the class in which the current method is defined: Using static:: Is no longer resolved to define the class in which the current method resides, but is evaluated at the actual run time. It can also be called a "static binding" because it can be used (but not limited to) the invocation of a static method.
A recent comment in a video was asked a small question: Is there a special consideration for static instead of self? Or we can change the question like this:
What is the new static and new self of PHP specific?
In fact, this one example should be very clear:
Class Father {public static function getself () { return to new self (),} public static function Getstatic () { return New Static (); }}class Son extends Father {}echo get_class (son::getself ()); Fatherecho Get_class (Son::getstatic ()); Sonecho Get_class (Father::getself ()); Fatherecho Get_class (Father::getstatic ()); Father
Note that this line get_class(Son::getStatic());
returns the Son
class, which can be summed up as follows:
New self
1. self
returns the class in which the new self
keyword is new
located, as in the example here:
public static function Getself () { return new self ();//New keyword is here in Father}
Always returns Father
.
New static
2. static
on the above basis, a little bit smarter: The static
class that will return execution new static()
, such as execution returns, is the Son
execution that get_class(Son::getStatic())
Son
Father
get_class(Father::getStatic())
returns theFather
In the case of no inheritance, the same result can be considered new self
and new static
returned.
Tips: You can use a good IDE to see the annotations directly. such as Phpstorm: