2012-12-03 26 views
2

我想讓我的類從其父類繼承getProperties方法。PHP在超類中獲取屬性方法

class Mother { 
    function getProperties(){ 
    return get_class_vars(get_class($this)); 
    } 
} 

class Child extends Mother{ 
    private $one = 1; 
    private $two = 2; 
} 

問題是,如果我呼籲孩子的GetProperties,我得到一個空的結果:

$c = new Child(); 
var_dump($c->getProperties()); 

回報array(0) {}

如果我覆蓋的GetProperties方法在兒童使用相同的命令,它按預期工作並返回array(2) { ["one"]=> int(1) ["two"]=> int(2) }。所以我認爲$this解析爲Mother類而不是繼承該方法的類。 我怎樣才能讓孩子繼承方法,它的工作方式就像我需要它?或者我如何改變$this與孩子而不是母親一起工作的範圍? 也許我只是錯過了非常簡單的事實,所以任何幫助表示讚賞。

回答

5

問題是你的屬性是private。這使得他們只能訪問聲明的類,而不是其他語言。讓他們protected

不過請注意,即使再有似乎是不同的PHP版本中的一些矛盾:http://3v4l.org/1Rm6e

+0

在寫同樣的事情;)+1 – poncha

+0

啊沒關係,這工作,謝謝。我認爲這種方法和屬性會在相同的範圍內,因此彼此相互看。 – ximarin

+0

@ximarin不,「私人」真的意味着*私人這個類*。 :) – deceze