【发布时间】:2017-10-12 14:41:43
【问题描述】:
我看到了一些关于访问父类属性的问题(如PHP Accessing Parent Class Variable),但我似乎在一个前卫的情况下挣扎(我实际上不需要那种模式,但是好奇心,你知道...☺):
如果子类覆盖了父类变量,但仍想访问它怎么办?
例子:
class A {
protected $x = 'a';
}
class B extends A {
protected $x = 'b';
public function showX() {
var_dump(array(
'this->x' => $this->x,
'parent->x' => '??',
}
}
$b = new B();
$b->showX();
不依赖父级上的getX() 方法(并在B 类中使用parent::getX(),或者如果B 没有覆盖getX 方法,则仅使用$this->getX()),如何获得如下结果:
this->x: 'b'
parent->x: 'a'
正如http://php.net/manual/pl/keyword.parent.php#94177 所说,使用parent::$x 是行不通的,因为它会寻找不存在的静态属性$x。有什么工作方式吗?
【问题讨论】:
-
一旦你覆盖了
parent::$x...它就会被覆盖。与稍后在脚本中以程序方式重新分配变量并没有什么不同 - 您无法取回原始值。 -
您可以在父级中为
x添加一个getter,然后重新声明A并使用该getter - repl.it/M6uV -
你想要做的就像给一个变量一个值,然后覆盖这个值,然后你想得到以前的值。
标签: php overloading