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
我正在尝试通过一些更改覆盖 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