如何在继承类中访问静态成员覆盖?

时间:2016-04-25 19:47:59

标签: php

这是一个例子

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值而不是基类值。

在这种情况下,它表示“默认”但我希望它说“特殊”,我如何让它引用覆盖值?

2 个答案:

答案 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关键字的情况。