2017-10-12 65 views
0

我看到了有关访问父类的属性(如PHP Accessing Parent Class Variable)一些问题,但我似乎在心急火燎的情况下奋斗(我其实不需要这样的模式,但好奇,你知道...☺ ):访问重载PHP性能

如果子类覆盖父类变量并仍想访问它,该怎么办?

例子:

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()或只是一个$this->getX()如果B未覆盖该getX法),如何获得导致这样的:

this->x: 'b' 
parent->x: 'a' 

由于http://php.net/manual/pl/keyword.parent.php#94177状态,使用parent::$x将无法​​正常工作,因为它会寻找不存在的静态属性$x。任何工作方式?

+3

一旦你覆盖了'parent :: $ x' ...它被覆盖。稍后在脚本中程序性地重新分配一个变量并没有什么不同 - 您无法获得原始值。 – CD001

+0

你可以在父类中为'x'添加一个getter,然后重新声明'A'并使用getter - https://repl.it/M6uV –

+0

你想要做的就像给变量赋值,然后覆盖该值,然后您想要获得以前的值。 –

回答

1

什么你基本上问的是:

如果我overrite值,但仍希望老的价值是什么?

然后只有一个简单的解决方案。您制作另一个变量并将其存储在那里,然后覆盖它。

+1

这就是我的想法;但知道一些PHP的东西和方式去...这是值得怀疑! – Xenos