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

时间:2015-07-16 10:26:23

标签: php class object inheritance

我有这个

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中)

1 个答案:

答案 0 :(得分: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