什么是PHP中的后期静态绑定?

什么是PHP中的后期静态绑定?
从PHP 5.3.0开始,PHP实现了一种称为后期静态绑定的功能,可以用于在静态继承的上下文中引用被调用的类。

后期静态绑定试图通过引入一个关键字来解决这个限制,该关键字引用在运行时初始调用的类。决定不引入一个新的关键字,而是使用已经保留的静态。

让我们看一个例子:

<?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 ::引入其范围。

http://stackoverflow.com/questions/1912902/what-exactly-are-late-static-bindings-in-php

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:什么是PHP中的后期静态绑定?