從父

2012-07-01 39 views
-1

訪問一個子類道具我的意思是類似的東西:從父

class parentClass { 
    public function method() { 
     echo $this->prop; 
    } 
} 
class childClass extends parentClass { 
    public $prop = 5; 
} 

我怎樣才能從父道具孩子道具?

謝謝...

+3

實際上 - 家長對孩子應該一無所知。你最好解釋*爲什麼*你需要這樣做,因爲你有可能以錯誤的方式解決問題 – zerkms

+0

由於父類對其子類是不可知的,所以這是不可能的(沒有一些相當醜陋的消遣)。你能解釋一下你想要完成什麼嗎?可能有更好的方法來做到這一點。 – Andrew

+1

這個確切的代碼片段完美工作。 PHP不使用經典的多態,因爲它知道對象的運行時類。 –

回答

2

要麼我不完全理解你想要什麼或解決方案是如下代碼一樣微不足道。

class parentClass { 
    public function method() { 
     echo $this->prop; 
    } 
} 
class childClass extends parentClass { 
    public $prop = 5; 
} 
$object = new childClass(); 
$object->method(); 

我的意思是子類是擴展基類,這意味着它也將繼承其父類的所有方法。這使得使用父類的方法的整個過程與從子類的實例調用它的過程一樣簡單。

0
//parent 
class parentClass { 

    protected $prop = null; 

    public function method() { 
     echo $this->prop; 
    } 
} 

//child 
class childClass extends parentClass { 
    protected $prop = 5; 
} 

確保變量在父類中定義爲好。所以它會被父母訪問。

1

子類的所有受保護和公共成員在其父類中都可見,因此您提供的示例代碼應該可以正常工作。 Quote from the php doc

聲明爲protected的成員只能在類 本身以及繼承類和父類中訪問。

但實際的問題是:你真的需要它嗎?

合適的OO方法是定義一個表達內容的自包含父類。它不應該需要訪問子類的屬性 - 這是所謂的code smell。如果你真的認爲你有一個地方類似的結構是必要的情況下,你可能正在尋找抽象方法,這保證子類有此屬性:

abstract class Animal { 
    public function makeNoise() { 
     echo $this->getNoiseString(); 
    } 
    protected abstract function getNoiseString(); 
} 

class Cat extends Animal { 
    protected function getNoiseString() { 
     return 'meow'; 
    } 
}