2011-05-18 21 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(); 
}