「静态」指的是无需对类进行实例化,就可以直接调用这些属性和方法
<?php
class Car
{
public static $WHEELS = 4;
public static function getWheels()
{
return self::$WHEELS;
}
}
如果是在类内部方法中,需要通过 self::
引用当前类的静态属性和方法,就像常量一样,因为静态属性和方法无需实例化类即可使用,而没有实例化的情况下,$this
指针指向的是空对象,所以不能动过它引用静态属性和方法
静态方法支持重写
self::
和static::
的区别:
后期静态绑定(Late Static Bindings)针对的是静态方法的调用,使用该特性时不再通过 self::
引用静态方法,而是通过 static::
,如果是在定义它的类中调用,则指向当前类,此时和 self
功能一样,如果是在子类或者其他类中调用,则指向调用该方法所在的类,我们通过后期静态绑定改写上述代码,
而self::class
则始终指向的是定义它的类:
class Car
{
...
public static function getClassName()
{
return __CLASS__;
}
public static function who()
{
echo static::getClassName() . PHP_EOL;
}
}
class LynkCo01 extends Car
{
public static function getClassName()
{
return __CLASS__;
}
}
...
Car::who();
LynkCo01::who();
结果如下:
Car
LynkCo01
可以通过 static::class
来指向当前调用类的类名
通过 __CLASS__
可以获取当前类的类名