2017-02-14 14 views
-3
class A 
{ 
    private $a; 
} 

class B extends A 
{ 
    function __construct() 
    { 
     (new \ReflectionClass($this))->getProperty('a')->setAccessible(true); 
     unset($this->a); // fatal error 
    } 
} 

(new B()); 

這會觸發一個致命的錯誤,雖然我確實改變了無障礙我不能取消設置繼承的私有變量;即使反射

+2

而不是'繼承'這個類,而是通過使用這個類來注入它,然後使用它想要的那部分來構造你的類。維護起來要容易得多。特別是如果你使用'interfaces'。 –

回答

1

不,不,你不能。 $a存在只有在符號表中爲class A的實例,但new B爲您提供了class B的實例。從你的對象new B,$a角度不存在定義:因此unset($this->a)實際上不可能。