PHP - 无法两次实现相同的接口

luc*_*444 1 php oop extends interface

我试图实现一个接口两次,扩展另一个接口,但无法弄清楚为什么我得到致命错误

这是我的代码:

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) {
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

致命错误:d :: baz()的声明必须与第26行的K:\ xampp\htdocs\oop\Lec 2\index.php中的b :: baz(Baz $ baz)兼容

Eri*_*rik 6

你的d类baz错误地实现了这个方法.接口指定它必须Baz使用typehint 接受参数,但是您使用typehint Foo- 不允许从接口更改参数类型.在类d中,修复将是:

<?php

class d implements b
{
   public function foo() {}
   public function baz(Baz $foo) {}
}
Run Code Online (Sandbox Code Playgroud)

函数的args由接口指定,可能不会更改.