从PHP 5.3.0开始,PHP实现了一个称为后期静态绑定的功能,可用于在静态继承的上下文中引用被调用的类。
后期静态绑定试图通过引入一个引用最初在运行时调用的类的关键字来解决该限制。决定不引入新的关键字,而是使用static已经保留的关键字。
我们来看一个例子:
class Car
{
public static function run()
{
return static::getName();
}
private static function getName()
{
return 'Car';
}
}
class Toyota extends Car
{
public static function getName()
{
return 'Toyota';
}
}
echo Car::run(); // Output: Car
echo Toyota::run(); // Output: Toyota
?>
late static bindings通过存储在最后一次“非转发呼叫”中命名的类来工作。在静态方法调用的情况下,这是显式命名的类(通常是::运算符左侧的类); 在非静态方法调用的情况下,它是对象的类。
A“转发呼叫”是通过引入一个静态self::,parent::,static::,或者,如果在类层次结构往上走,forward_static_call()。
该函数get_called_class()可用于检索具有被调用类名称的字符串并static::引入其范围。