In PHP object-oriented programming, you will always encounter
class test{ public static function test(){ self::func(); static::func(); } public static function func(){} }
But do you know the difference between self and static?
In fact, the difference is very simple. You only need to write a few demos to understand:
Demo for self:
class Car { public static function model(){ self::getModel(); } protected static function getModel(){ echo "This is a car model"; } }
Car::model();
Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } }
Taxi::model();
Get output
This is a car model This is a car model
You can find that self will still call the method of the parent class in the subclass
Demo for static
class Car { public static function model(){ static::getModel(); } protected static function getModel(){ echo "This is a car model"; } } Car::model(); Class Taxi extends Car { protected static function getModel(){ echo "This is a Taxi model"; } } Taxi::model();
Get output
This is a car model This is a Taxi model
You can see that when calling static, even if the subclass calls the method of the parent class, the method called in the parent class method will still be the method of the subclass (so confusing...)
Before the PHP5.3 version, there was still a little difference between static and self. What exactly was it? After all, they were all dominated by version 7. I won’t understand it anymore.
The summary is: self can only refer to methods in the current class, and the static keyword allows functions to dynamically bind methods in the class at runtime.