【问题标题】:Can PHP child classes alter parameters of overridden methods?PHP 子类可以更改重写方法的参数吗?
【发布时间】:2012-07-26 21:47:28
【问题描述】:

我可以在子类中重写一个PHP方法,改变签名中的参数,如下所示。

class theParent {
  function myMethod($param1) {
    // code here
  }
}

class theChild extends theParent {
  function myMethod($param1, $param2) {
    // code here
  }
}

我对此进行了测试,它工作正常,不会引发任何错误。我的问题是,这是不好的形式吗?还是 OOP 的基本原则?

如果父方法被声明为抽象,则子签名不能偏离。如果您需要强制执行接口的该方面,大概这是使用的机制?

【问题讨论】:

  • 那个子类不是第一类的子类。更不用说它是无效的语法......
  • 它被称为覆盖。如果要防止子类覆盖方法,请使用 final 关键字。

标签: php oop


【解决方案1】:

如果与该方法的父类的参数数量不匹配,您将抛出严格标准的错误消息。

更多信息在这里...

Why is overriding method parameters a violation of strict standards in PHP?

【讨论】:

    【解决方案2】:

    只要

    class theChild extends theParent {
    }
    

    这是 OOP 的一个很好的例子。

    【讨论】:

      【解决方案3】:

      您所做的称为覆盖,这很好,没有什么不好,但是如果您想让子类更好地遵守父类的签名,您可以使用如下接口您应该只给出签名,子类必须实现它们正如他们所声明的那样。

       interface theParent {
            function myMethod($param1) ;
          }
      
          class theChild extends theParent {
            function myMethod($param1) {
              // code here
            }
          }
      

      希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 2014-01-24
        • 1970-01-01
        • 2011-09-02
        • 2013-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多