2013-05-15 176 views
2

我發現自己在這種情況下,我只是骯髒的黑客入侵。但我想知道,有沒有一些乾淨的方法?調用祖父母方法沒有調用父母和沒有修改父母/祖父母

class base{ 
    var $value; 
    public function getValue(){ 
     return 'returned from base: '. $value; 
    } 
} 

class object extends base{ 
    public function getValue(){ 
     $this->value = 'wrong value'; 
     return parent::getValue(); 
    } 
} 


class overwrite extends object{ 
    public function getValue(){ 
     $this->value = 'right value'; 

     ????? 

    } 
} 

$o = new overwrite; 
echo $o->getValue(); 

所有我被允許編輯的是overwrite。如果我撥打parent::getValue(),該值將被錯誤的值覆蓋。如果我命名該類,如base::getValue(),基類不會有$value屬性集。

回答

1

我想通了這一點之前,我完成了問題,但我決定無論如何將它張貼:

基地::的getValue()似乎是正確的解決方案,PHP似乎做一些神奇的出現,讓base類當從其子中調用時具有$value屬性集。