「静态」指的是无需对类进行实例化,就可以直接调用这些属性和方法

    1. <?php
    2. class Car
    3. {
    4. public static $WHEELS = 4;
    5. public static function getWheels()
    6. {
    7. return self::$WHEELS;
    8. }
    9. }

    如果是在类内部方法中,需要通过 self:: 引用当前类的静态属性和方法,就像常量一样,因为静态属性和方法无需实例化类即可使用,而没有实例化的情况下,$this 指针指向的是空对象,所以不能动过它引用静态属性和方法

    静态方法支持重写

    self::static::的区别:
    后期静态绑定(Late Static Bindings)针对的是静态方法的调用,使用该特性时不再通过 self:: 引用静态方法,而是通过 static::,如果是在定义它的类中调用,则指向当前类,此时和 self 功能一样,如果是在子类或者其他类中调用,则指向调用该方法所在的类,我们通过后期静态绑定改写上述代码,
    self::class 则始终指向的是定义它的类:

    1. class Car
    2. {
    3. ...
    4. public static function getClassName()
    5. {
    6. return __CLASS__;
    7. }
    8. public static function who()
    9. {
    10. echo static::getClassName() . PHP_EOL;
    11. }
    12. }
    13. class LynkCo01 extends Car
    14. {
    15. public static function getClassName()
    16. {
    17. return __CLASS__;
    18. }
    19. }
    20. ...
    21. Car::who();
    22. LynkCo01::who();

    结果如下:

    1. Car
    2. LynkCo01

    可以通过 static::class 来指向当前调用类的类名
    通过 __CLASS__ 可以获取当前类的类名