2017-10-12 32 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