【问题标题】:Declaration of Child method should be compatible with Parent methodChild 方法的声明应该与 Parent 方法兼容
【发布时间】:2016-08-11 17:13:25
【问题描述】:

警告:Child::default_action($form_id) 的声明应该与 Parent::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_ 其他一些是方法声明之前的命令或类似的东西。

【问题讨论】:

  • 如果您向我们展示完整的 2 个课程会有所帮助
  • 如果父类方法有参数,那么子类方法也必须有相同的参数如果没有,那么子类方法不能有参数
  • 这就是我所发现的。效果是当我将子项中的参数添加到父项时,所有其他类都开始失败。
  • 所以你的孩子(子类)方法不能有$form_id参数

标签: php class oop


【解决方案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();

【讨论】:

  • 除非你无法控制父类,然后你只需要遵守父类限制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多