PHP 中后期的静态绑定到底是什么?
2022-08-30 06:48:22
PHP 中后期的静态绑定到底是什么?
您绝对需要阅读PHP手册中的后期静态绑定。但是,我会尝试为您提供快速摘要。
基本上,它归结为关键字不遵循相同的继承规则。 始终解析为使用它的类。这意味着,如果在父类中创建方法并从子类调用它,则不会像预期的那样引用子类。self
self
self
后期静态绑定引入了关键字的新用法,解决了这一特定缺点。当你使用时,它表示你第一次使用它的类,即。它“绑定”到运行时类。static
static
这是它背后的两个基本概念。在发挥作用时的方式和操作可能很微妙,因此,我强烈建议您研究手册页示例,而不是更详细地介绍。一旦你了解了每个关键字的基础知识,这些例子对于查看你会得到什么样的结果是非常必要的。self
parent
static
static
来自 PHP: 晚期静态绑定 - 手动:
从 PHP 5.3.0 开始,PHP 实现了一个称为后期静态绑定的功能,该功能可用于在静态继承的上下文中引用被调用的类。
后期静态绑定尝试通过引入引用最初在运行时调用的类的关键字来解决该限制。...决定不引入新的关键字,而是使用已经保留的使用。
static
让我们看一个例子:
<?php
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
?>
后期静态绑定通过存储上一个“非转发调用”中指定的类来工作。在静态方法调用的情况下,这是显式命名的类(通常是运算符左侧的类);在非静态方法调用的情况下,它是对象的类。“转发调用”是一个静态调用,由 、 、 引入,或者,如果在类层次结构中向上,则为 。该函数可用于检索具有被调用类名称的字符串并介绍其作用域。
::
self::
parent::
static::
forward_static_call()
get_called_class()
static::