PHP - 无法实现相同的接口两次
PHP - Unable to implement the same interface twice
我正在尝试实现一个接口两次,它扩展了另一个接口,但无法弄清楚为什么我会收到 致命错误
这是我的代码:
interface a {
public function foo();
}
interface b extends a {
public function baz(Baz $baz);
}
// This will work
class c implements b {
public function foo() {
}
public function baz(Baz $baz) {
}
}
// This will not work and result in a fatal error
class d implements b {
public function foo() {
}
public function baz(Foo $foo) {
}
}
我收到此错误消息:
致命错误:d::baz() 的声明必须与 K:\xampp\htdocs\oop\Lec2\index 中的 b::baz(Baz $baz) 兼容。 php 第 26 行
您的 class d 错误地实现了 baz
方法。接口指定它必须采用类型提示 Baz
的参数,但您使用类型提示 Foo
- 不允许从接口更改参数类型。 class d 中的修复将是:
<?php
class d implements b
{
public function foo() {}
public function baz(Baz $foo) {}
}
函数的参数由接口指定,不得更改。
这不是 Java,您不能(不幸的是)重载方法。所以,最后有类似
class d implements b
{
public function foo()
{
}
public function baz(Foo $foo)
{
}
public function baz(Baz $baz)
{
}
}
将导致
Fatal error: Cannot redeclare d::baz() in [...][...] on line XX
实现接口时,您必须按照声明的方式实现它。因此,由于 baz
是使用 Baz $baz
参数声明的,因此您 必须 使用相同的参数来实现它。
class d implements b
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}
我正在尝试实现一个接口两次,它扩展了另一个接口,但无法弄清楚为什么我会收到 致命错误
这是我的代码:
interface a {
public function foo();
}
interface b extends a {
public function baz(Baz $baz);
}
// This will work
class c implements b {
public function foo() {
}
public function baz(Baz $baz) {
}
}
// This will not work and result in a fatal error
class d implements b {
public function foo() {
}
public function baz(Foo $foo) {
}
}
我收到此错误消息:
致命错误:d::baz() 的声明必须与 K:\xampp\htdocs\oop\Lec2\index 中的 b::baz(Baz $baz) 兼容。 php 第 26 行
您的 class d 错误地实现了 baz
方法。接口指定它必须采用类型提示 Baz
的参数,但您使用类型提示 Foo
- 不允许从接口更改参数类型。 class d 中的修复将是:
<?php
class d implements b
{
public function foo() {}
public function baz(Baz $foo) {}
}
函数的参数由接口指定,不得更改。
这不是 Java,您不能(不幸的是)重载方法。所以,最后有类似
class d implements b
{
public function foo()
{
}
public function baz(Foo $foo)
{
}
public function baz(Baz $baz)
{
}
}
将导致
Fatal error: Cannot redeclare d::baz() in [...][...] on line XX
实现接口时,您必须按照声明的方式实现它。因此,由于 baz
是使用 Baz $baz
参数声明的,因此您 必须 使用相同的参数来实现它。
class d implements b
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}