2013-08-03 34 views
0

我想要調用祖父母的功能。如何用相同的參數調用函數?

因此,我需要在父類中創建相同的函數。

這是我granparent代碼:

class GP{ 
    public function validate(&$data, $source, $operationData=null){ 
     ... 
    } 
} 

這是我的孩子的電話:

class child{ 
    public function doSth(){ 
     parent::validate(array(...), "user", true); 
    } 
} 

爲了達到祖父母的功能,家長使用此代碼:

class parent{ 
    protected function validate(&$data, $source, $operationData=null){ 
     return parent::validate($data, $source, $operationData); 
    } 
} 

問題:

當我更改函數的參數時,我需要在每個子類中更改它們。

有沒有更有效的方法爲我的父級,所以我不需要改變什麼呢?

+0

爲什麼不能像這樣稱呼GP的方法呢? – silkfire

+1

你爲什麼要傳遞'$ data'作爲參考? –

回答

1

對於grandparent類中的方法,使用public修飾符,您的子類(和孫子類以及曾孫等)將繼承此方法。所以,沒有必要寫這篇文章:

protected function validate(&$data, $source, $operationData=null){ 
    return parent::validate($data, $source, $operationData); 
} 

刪除此聲明,任何子類的GP將能夠調用validate()GP類。

對於一個簡單例子,考慮下面的代碼:

class GP { 
    public function foo() { echo 'Hello, world!'; } 
} 
class P extends GP {} 
class C extends P { 
    public function call_foo() { 
     $this->foo(); 
    } 
} 

隨着子類的對象:

$o = new C; 

可以調用對象的foo()方法:

$o->foo(); 

或課內:

$o->call_foo(); 
+0

o_O我不知道......那很有道理!似乎我必須現在重寫一些代碼:) – maja

0

你不需要寫參數,你可以通過func_get_args得到所有傳遞的參數()或func_get_arg得到一個參數(數量)

,可與它們傳遞: $ parent_class =了get_parent_class($本); call_user_func_array(數組($ parent_class,'walk'),$ args);

+0

這的確如此,我可以將父參數作爲數組獲取。但我不能把他們轉發給祖父母 – maja

+0

這也是一個昂貴的操作。 –

相關問題