0

我正在尝试调用祖父母的功能。

出于这个原因,我需要在父类中创建相同的函数。

这是我祖父母的代码:

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);
    }
}

问题:

当我更改函数的参数时,我也需要在每个子类中更改它们。

我的父级有没有更有效的方法,所以我不需要在那里改变任何东西?

4

2 回答 2

1

使用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();
于 2013-08-03T17:56:02.073 回答
0

不需要写参数,可以通过func_get_args()获取所有传递的参数或者通过func_get_arg(number)获取一个参数

并且可以通过: $parent_class=get_parent_class($this); call_user_func_array(array($parent_class, 'walk'), $args);

于 2013-08-03T17:54:41.560 回答