Child方法的声明应与Parent方法兼容


Declaration of Child method should be compatible with Parent method

警告:子级::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_和其他一些是在方法声明或类似的东西之前的命令。

问题是父级和子级的函数声明不兼容(如错误所示(

public function method([$args])是函数声明。

在您的情况下,父方法不接受任何参数,但子方法接受任何参数。因此您会得到错误。

要解决此问题,您应该让父方法接受与子方法相同的参数。您可能希望为参数提供一些合理的默认值。

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

正如RiggsFilly所指出的,您可能无法控制父类,必须使子类符合。在这种情况下,可以使用类属性将表单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();