后期静态绑定

后期静态绑定#

从 PHP5.3.0 开始,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类,即在类的继承过程中,使用的类不在是当前类,而是调用的类。后期静态绑定使用关键字 static 来实现,通过这种机制,“static::” 不在被解析为定义当前方法所在的类,而是在实际运行中计算得到的,即为运行时最初调用的类。虽然将其称之为 “后期静态绑定”,但它不仅限制于静态方法的调用。下面介绍一个具体的实例。

class A{
    public static function call(){
        echo "class A"."<br>";
    }

    public static function test(){
        self::call();
        static::call();
    }
}

class B extends A{
    public static function call(){
        echo "class B"."<br>";
    }
}

B::test();

通过上述实例可以看出,在调用 test () 函数时,“self::” 是直接调用本类中的方法,而 static 是根据调用 test () 函数的类来决定 “static::” 的值,因此 static 的值只有在调用时才能确定下来,而 self 则是在定义时就确定下来的。需要注意的的是,static 并不限于静态方法的调用,同样适用于非静态函数的调用,调用的方式同上述静态函数一样,是在调用时动态确定的。

本作品采用《CC 协议》,转载必须注明作者和本文链接