父类的方法如何访问子类的重写变量?

时间:2011-10-03 20:52:21

标签: php subclassing override

如果我有一个覆盖受保护变量的子类,并且父类具有对该变量执行操作的函数,那么如何使该函数使用它被覆盖的值?

class Superclass {
    protected $map;

    public function echoMap()
    {
        foreach ($this->map as $key=>value)
        {
            echo "$key:$value";
        }
    }
}

class Subclass extends Superclass {
    protected $map = array('a'=>1, 'b'=>2);
}

当我运行以下

$subclass = new Subclass();
$subclass->echoMap();

我希望它能够回归

a:1
b:2

但父类中的$this->map为空。我该怎么办才能得到我想要的行为?


编辑: 构造函数中存在错误,而不是上面发布的示例中的错误。它按预期工作。

2 个答案:

答案 0 :(得分:1)

PHP确实按照您描述的方式工作。我唯一能看到的是你的例子,Subclass不扩展Superclass。我认为这只是你的例子中的一个错误。检查以确保所有类实际上扩展了正确的类,并检查以确保变量名中没有拼写错误。

有关其工作的示例,请参阅http://codepad.viper-7.com/kDrbIh

答案 1 :(得分:0)

即使它看起来只是一个错字(不扩展超类),你应该尝试在两个类的构造函数中初始化变量。

function __construct() { // initialize protected values }