2012-12-11 33 views
0

我有一個基本的類庫在父類有一個函數的工作...如何解決PHP中的類/函數聲明問題..?

function functionName($param) { 

} 

然後,在擴展此類我有一個子類...

function functionName($param, $param2, $param3) { 

} 

當我讓使用這個子類調用,我結束了下面的PHP通知...)

宣言child_class的::使用functionName(應與 是parent_cl兼容屁股::使用functionName()

代碼仍會成功完成,但通知我擔心,我想擺脫它。我發現如果將其他參數添加到父類的函數版本中,問題就會消失。除了擴展類以外,這些參數在任何地方都是不必要的,但是,似乎很奇怪必須添加...不是嗎?

有沒有更好的方法來解決這個問題,或者我應該確保在這個函數的所有實例中添加這些相同的參數,而不管該特定類是否真的需要它?

任何信息將不勝感激。謝謝!

+0

你既需要在子類中可用? –

+0

Php doesen't支持重載,據我所知,看看這個主題http://stackoverflow.com/questions/2994758/what-is-function-overloading-and-overriding-in-php – vodich

+0

我可以'噸似乎重複的問題..我能夠創建2個類的子類覆蓋父類只有一個不同的簽名方法,似乎都工作正常。你能把整個代碼發佈給你嗎? –

回答

1

你如果你繼承了一個類,就可以得到完全相同的簽名。

一個快速的解決方法可以使用func_get_args做到:

function functionName ($param1) { // This is in the derived clas 
    $params = func_get_args(); 
    $param2 = $params[1]; 
    $param3 = $params[2]; 
} 
+0

我沒跟着.. ?? $ param1有什麼含義? –

+0

@AndrewAngell - $ param1默認分配在函數中。如果調用$ foo-> functionName(1,2,3) - PHP內部調用$ foo-> functionName(1),func_get_args()返回數組(1,2,3) – skyronic

1

你說,當你通過提供具有相同名稱的方法添加額外的參數是因爲在面向對象的方法覆蓋確實在子類中重寫以下

「的實施(替換)超類中實現它的工作原理,相同的參數或簽名,和相同的返回類型作爲父類」的方法

以下鏈接可能ň幫助你

Declaration of Methods should be Compatible with Parent Methods in PHP

+0

我想我不是以下..??這似乎是說明我認爲會發生什麼,似乎正在發生的事情,但它也把這個通知給我。 –