没有参数的接口

时间:2014-08-20 04:04:52

标签: php

我对接口有疑问。我可以让接口指定一个没有参数的方法,但是在类中仍然有参数吗?

interface FooInterface {
    public function bar();
}

class Foo implements FooInterface {
    public function bar($parameters = array())
    {
        return 'bar';
    }
}

我在PHP 5.5.10中没有在本地执行此操作时出错,但在PHP 5.4.0中执行此操作。

1 个答案:

答案 0 :(得分:2)

问题是bar类中Foo方法的声明实际上与FooInterface中的声明不兼容。

FooInterface::bar是一个没有参数的方法,Foo::bar有一个参数(虽然是可选参数)。这会在早期的PHP 5.4.x版本中引发异常。

显然,在以后的版本中,只要参数是可选的,PHP开发人员就已经决定声明一个参数多于接口或父类的方法。

修改

The PHP documentation states:

  

此外,方法的签名必须匹配,即类型提示和所需参数的数量必须相同。例如,如果子类定义了一个可选参数,抽象方法的签名没有,则签名中没有冲突。

因此,您遇到的行为似乎是早期版本的PHP中的一个错误。不幸的是,我无法找到错误报告或发布说明,这些报告会指出修复错误的时间和PHP版本。

我现在可以测试的最低版本是PHP 5.4.9,并且该错误似乎已经修复,因为我可以毫无错误地运行代码。