以下代码输出'在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();
答案 0 :(得分:2)
self
始终指的是定义它的类。您正在寻找的是“Late Static Binding”(正如您已经建议的那样,但不要使用)。代码块中的static
关键字是指“实际”类,意思是:被调用的类(XY::method()
),或被调用对象的类($x->method()
)。
return static::$x;
属性声明中的static
关键字与LSB无关。它只是类属性的通用声明。
请注意,LSB在PHP&lt; 5.3
中不可用