在这种情况下,后期静态绑定如何工作?

时间:2011-02-23 12:20:20

标签: php php-5.3

以下代码输出'在A类中设置的',如何在不更改B类的情况下输出'如在B类中设置的'?

<?php

class A
{
    public static $x = 'x as set in class A';

    public static function getX()
    {
        return self::$x;
    }
}


class B extends A
{
    public static $x = 'x as set in class B';
}


echo B::getX();

1 个答案:

答案 0 :(得分:2)

self 始终指的是定义它的类。您正在寻找的是“Late Static Binding”(正如您已经建议的那样,但不要使用)。代码块中的static关键字是指“实际”类,意思是:被调用的类(XY::method()),或被调用对象的类($x->method())。

return static::$x;

属性声明中的static关键字与LSB无关。它只是类属性的通用声明。

请注意,LSB在PHP&lt; 5.3

中不可用