这是一个例子
class derp {
public static $importantVariable = "default";
public function doSomethingImportant() {
echo self::$importantVariable;
}
}
class fancy extends derp {
public static $importantVariable = "special";
}
$fancyInstance = new fancy();
$fancyInstance->doSomethingImportant();
好的,我想覆盖静态成员“importantVariable”并使其成为继承函数使用overriden值而不是基类值。
在这种情况下,它表示“默认”但我希望它说“特殊”,我如何让它引用覆盖值?
答案 0 :(得分:1)
<?php
class derp {
public static $importantVariable = "default";
public function doSomethingImportant() {
echo static::$importantVariable; //HERE
}
}
class fancy extends derp {
public static $importantVariable = "special";
}
$fancyInstance = new fancy();
$fancyInstance->doSomethingImportant();
http://php.net/manual/en/language.oop5.late-static-bindings.php
答案 1 :(得分:1)
而不是self
,请使用static
:
class derp {
public static $importantVariable = "default";
public function doSomethingImportant() {
echo static::$importantVariable;
}
}
static
关键字利用late static binding,因此它将采用在运行时使用的具体类中定义的值,而不是恰好引用的类,如是self
关键字的情况。