2011-05-18 65 views
9

如果您有两个扩展相同基类的类,并且需要使其中的一个覆盖函数以获取其他参数。在任何一个类上调用函数时总是传递附加参数可以吗?你能传递比函数期望更多的参数吗?

的伪代码,以帮助证明有点...

如果我们有3类和函数

  • 富:: DoSomething的()
  • foo_subclass_one :: DoSomething的()
  • foo_subclass_two :: DoSomething的($输入)

我有这三个中的一个实例,我可以CAL l $ instance.doSomething($ input)

I -think-发生什么是foo和foo_subclass_one会忽略附加参数,foo_subclass_two会使用它。它是否正确?如果我有很多子类,并且真的想避免触摸10个以上的文件,有没有更好的方法可以做到这一点?

谢谢!

回答

4

有两种方法可以做到这一点:

扩展方法使用默认参数:

public function doSomething($input=null) {} 

注意,您需要为所有实例做到这一点,即使它不被使用。

在这种情况下,你可能需要使用该方法的参数数组:

public function doSomething() { 
    $args = func_get_args(); 
    if (isset($args[0])) { $this->doSomethingElse(); 
}