这是我的代码:
我有一个类A
,方法foo
,它返回一个Bar
对象。
class A {
public function foo(): Bar {
//some ops
return $bar; //'Bar' object
}
}
我还有一个类B
,它使用重写方法A
扩展类foo
,返回BarX
个对象。
class B extends A {
public function foo(): BarX {
//some ops
return $barX; //'BarX' object
}
}
重要的是 BarX
类扩展了Bar
类。
当我运行我的代码时,我在课程B
上出错,说:
兼容
B::foo(): BarX
声明必须与A::foo(): Bar
BarX
延伸Bar
后,它们的兼容性如何?我怎么能解决这个问题呢?
谢谢。
答案 0 :(得分:2)
让Bar和BarX都实现一个接口,并在你返回类型时使用它。
<?php
interface BarInterface(){ }
class Bar implements BarInterface(){ }
class BarX implements BarInterface(){ }
class A {
public function foo(): BarInterface {
//some ops
return $bar; //'Bar' object
}
}
class B extends A {
public function foo(): BarInterface {
//some ops
return $barX; //'BarX' object
}
}
答案 1 :(得分:1)
你可以返回一个BarX,但由于B扩展了A,它必须返回相同的类型,但由于BarX是Bar,你可以这样做:
class B extends A {
public function foo(): Bar {
$barX = new BarX;
//some ops
return $barX; //'BarX' object
}
}
答案 2 :(得分:1)