PHP Class 方法继承

PHP Class Method Inheritance

我正在尝试通过一些更改覆盖 class' 父函数。我有一个参数需要在父级和子级上进行类型提示,它是 class 扩展了该类型提示:

class BaseObject { 
  //...
}

class NewObject extends BaseObject {
  //...
}

// -----------------------------------

class ParentClass {
  function method(BaseObject $obj) {
     //...
  }
}

class ChildClass extends ParentClass {
  function method(NewObject $obj) {
     //...
  }
}

PHP 返回:

Declaration of ChildClass::method(NewObject $obj) should be compatible with ParentClass::method(BaseObject $obj)

我觉得这很奇怪,因为 NewObject 是 BaseObject 的一个实例。

我认为你需要的是一个接口。如果两者 class 实现相同的接口,你可以对你想要的方法进行依赖注入。

interface InterfaceName {
  //...
}

class BaseObject implements InterfaceName { 
  //...
}

class NewObject extends BaseObject implements InterfaceName {
  //...
}

class ParentClass {
  function method(InterfaceName $obj) {
     //...
  }
}

class ChildClass extends ParentClass {
  function method(InterfaceName $obj) {
     //...
  }
}

参考:https://www.php.net/manual/en/language.oop5.interfaces.php