2013-08-03 30 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

这也是一个昂贵的操作。 –

相关问题