2011-05-07 96 views
2

我很確定沒有辦法,但想檢查/確認。在PHP中,有沒有辦法從父類中的子類訪問屬性

我可以通過函數傳遞道具,但是這需要改變一些我不喜歡的函數。我使用的是PHP 5.3。

例如:

<?php 
class A{ 
    public function accessProps(){ 
    echo "about to show props<br />"; 
    // cant access, child::? 
    var_dump($this->props); 
    } 
} 

class B extends A{ 
    //want this accessible in parent class 
    public $props=array('green','blue','red'); 

    public function sayHello(){ 
     echo 'hello '; 
     var_dump($this->props); 
    } 
} 

$b=new B(); 
$a=new A(); 

$b->sayHello(); 
$a->accessProps(); 

?> 

編輯 - 我喜歡的反射想法,但將是一個有點猶豫添加反射的只有這一種情況。也許最簡單/最簡單的方法就是在需要它的類中傳遞道具,並將它作爲構造函數中的可選參數。這樣,不需要更改不需要它的類並訪問需要它的類。我認爲應該這樣做。像這樣:

​​
+0

這兩種方法都有效。 – 2012-11-06 16:51:35

回答

2

簡短回答是的。

有點長的答案,你這樣做的方式,沒有。

詳細的解答:

他們的方式你寫它,因爲類A有沒有對孩子的線索它不是可行的。 但是,如果您在A級中有一個setter,那麼您可以使用SPL:

class A{ 
    public function accessProps($child){ 

    $reflect = new ReflectionClass($child); 
    $props = $reflect->getProperties(ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED); 

    } 
} 
相關問題