严格警告:Child::set()的声明应该与Parent::set()兼容


PHP Strict warning: Declaration of Child::set() should be compatible with Parent::set()?

我有这个

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)兼容

为什么我得到这个警告?

你的代码应该像

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