2016-08-11 67 views
0

警告:兒童的聲明:: default_action($ form_id)應與家長:: default_action()子方法的聲明應該與父類的方法兼容

我知道我缺乏的部門兼容瞭解對象編碼和我運氣好多次修復的東西,但在這個消息中,我試圖理解爲什麼有些工作。

我在php錯誤日誌中得到了上面的錯誤信息。原來的父類的方法是

function default_action() { 
     echo "<html><body></body></html>"; 
} 

我改成了

function set_default_action() { 
     echo "<html><body></body></html>"; 
    } 

日誌中的錯誤消息就走了。現在我試圖找出爲什麼這個工作。我把它放在那裏,因爲我在代碼set_current_action中看到。我有種想法,set_get_其他一些命令之前的方法聲明或類似的東西。

+1

那麼如果它不那麼子類方法不能有這將有助於如果您向我們展示了完整的2類 – RiggsFolly

+0

如果父方法有一個參數,然後在子類的方法也必須具有相同的參數(S)參數 – RiggsFolly

+0

https://github.com/openemr/openemr/blob/master/library/classes/Controller.class.php是全班級的鏈接 – user1794918

回答

1

的問題是,家長和孩子的函數聲明是不兼容的(如錯誤說)

public function method([$args])是函數的聲明。

在你的情況下,父方法不接受任何參數,但子方法不會,所以你會得到錯誤。

要解決這個問題,您應該讓父方法接受與子方法相同的參數。您可能會想要爲參數提供一些合理的默認值。

//parent class 
function default_action($form_id = null) { 

由於RiggsFolly所指出的,您可能沒有在父類控制和必須讓你的子類一致。在這種情況下,您可以使用類屬性將表單ID傳遞給方法。

//Child class 

class Child extends Parent{ 
    public $form_id; 

    function setFormId($form_id){ 
     $this->form_id = $form_id; 

    } 
    function default_action(){ 
     //Work with $this->form_id 
    } 

} 

//In code 
$form_id = 123; 
$C = new Child(); 
$C->setFormId($form_id); 
$C->default_action(); 
+0

除非你沒有控制父類,然後你只需要符合父母的限制 – RiggsFolly

+0

啊是的,好點 – dan08

相關問題