如果我有一个覆盖受保护变量的子类,并且父类具有对该变量执行操作的函数,那么如何使该函数使用它被覆盖的值?
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
为空。我该怎么办才能得到我想要的行为?
编辑: 构造函数中存在错误,而不是上面发布的示例中的错误。它按预期工作。
答案 0 :(得分:1)
PHP确实按照您描述的方式工作。我唯一能看到的是你的例子,Subclass不扩展Superclass。我认为这只是你的例子中的一个错误。检查以确保所有类实际上扩展了正确的类,并检查以确保变量名中没有拼写错误。
有关其工作的示例,请参阅http://codepad.viper-7.com/kDrbIh。
答案 1 :(得分:0)
即使它看起来只是一个错字(不扩展超类),你应该尝试在两个类的构造函数中初始化变量。
function __construct() {
// initialize protected values
}