PHP-无法实现同一接口两次
我试图实现一个接口两次,它扩展了另一个接口,但无法理解为什么会出现致命错误 这是我的密码:PHP-无法实现同一接口两次,php,oop,interface,extends,Php,Oop,Interface,Extends,我试图实现一个接口两次,它扩展了另一个接口,但无法理解为什么会出现致命错误 这是我的密码: 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 ba
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的声明必须与第26行K:\xampp\htdocs\oop\Lec 2\index.php中的b::bazBaz$baz兼容。接口指定它必须接受带有typehint Baz的参数,但使用typehint Foo-不允许从接口更改参数类型。d类中的修复程序是:
<?php
class d implements b
{
public function foo() {}
public function baz(Baz $foo) {}
}
函数的参数由接口指定,并且可能不会更改。您的类d错误地实现了baz方法。接口指定它必须接受带有typehint Baz的参数,但使用typehint Foo-不允许从接口更改参数类型。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)
{
}
}
将导致
致命错误:无法在第XX行的[…][…]中重新声明d::baz
实现接口时,必须以声明接口的相同方式实现接口。所以,由于baz是用baz$baz参数声明的,所以必须用相同的参数实现它
class d implements b
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}
这不是Java,不幸的是不能重载方法。所以,最终有了
class d implements b
{
public function foo()
{
}
public function baz(Foo $foo)
{
}
public function baz(Baz $baz)
{
}
}
将导致
致命错误:无法在第XX行的[…][…]中重新声明d::baz
实现接口时,必须以声明接口的相同方式实现接口。所以,由于baz是用baz$baz参数声明的,所以必须用相同的参数实现它
class d implements b
{
public function foo()
{
}
public function baz(Baz $baz)
{
}
}
谢谢@Erik我明白了。谢谢@Erik我明白了。我很感激。它帮助了@nordenheim我很感激。它帮助了@Nordenheim