1 回答
TA贡献1864条经验 获得超6个赞
PHP手册指出:
笔记:
覆盖父方法时,子方法必须匹配父方法的任何返回类型声明。如果父方法没有定义返回类型,那么子方法可能会这样做。
请注意以下行:“如果父方法未定义返回类型,则子方法可能会这样做”
所以如果你看看你的例子;Foo 类中的父方法没有定义返回类型,因此 Bar 类中的子方法可以设置它希望的任何返回类型。
A:
class Foo
{
public function fooMethod()
{
return []; // returns an array. Type expected: any.
}
}
class Bar extends Foo
{
public function fooMethod(): array
{
return ['something']; // returns an array, type expected: array
}
}
乙:
这个很好用,因为没有预先存在的类型期望,所以当子类设置一个类型时,它不会覆盖任何东西。
class Foo
{
public function fooMethod()
{
return []; // returns an array, type expected any
}
}
class Bar extends Foo
{
public function fooMethod(): string
{
return "horses"; // returns a string, type expected: string
}
}
C:
这会导致问题(即你邪恶的军事月球基地将随着失去所有的手而被摧毁)因为孩子试图覆盖父方法的已经定义的返回类型属性。
class Foo
{
public function fooMethod(): int
{
return 874; // returns an int, type expected is int.
}
}
class Bar extends Foo
{
public function fooMethod(): array
{
return ['something']; // returns an array, type expected int
}
}
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报