Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-无法实现同一接口两次_Php_Oop_Interface_Extends - Fatal编程技术网

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