【问题标题】:PHP Strict warning: Declaration of Child::set() should be compatible with Parent::set()?PHP 严格警告:Child::set() 的声明应该与 Parent::set() 兼容?
【发布时间】:2015-07-16 10:26:22
【问题描述】:

我有这个

class A {...}
class B extends A {...}

class Parent {
    public function setObj(A $obj)  { .... }
}
class Child extends Parent {
    public function setObj(B $obj) { .... }
}

这个消息:

严格警告:Child::setObj() 的声明应与 require_once() 中的 Parent::setObj(A $obj) 兼容

为什么我会收到此警告?

PHP 5.5.12(在 Drupal 7.38 中)

【问题讨论】:

  • 因为public function setObj(A $obj) !== public function setObj(B $obj)
  • class Child extends Parent { public function setObj(B $obj) { .... } } 更改为class Child extends Parent { public function setObj(A $obj) { .... } }

标签: php class object inheritance


【解决方案1】:

你的代码应该是这样的

class A {...}
class B extends A {...}

class Parent {
    public function setObj(A $obj)  { .... }
}
class Child extends Parent {
    public function setObj(A $obj) { .... }
}

因为您使用具有相同名称但具有其他签名的方法覆盖了Parent::setObj(A)

另请参阅:https://softwareengineering.stackexchange.com/questions/227766/changing-method-signature-for-implementing-classes-in-php

【讨论】:

  • 具体类类型提示不同。如果您想要一个但期望不同的类型,请使用两者的共同祖先。
猜你喜欢
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多