PHP 接口:指定任何可见性

2022-08-30 13:36:55

我正在为一组类使用一个接口。但是,我有一个问题,因为我希望在界面中允许任何可见性(即:,和)。publicprotectedprivate

我只需要保护父方法,我需要子方法私有,但我收到错误说

致命错误:接口方法 Baz::qux() 的访问类型必须在<带有 Baz/Bar 的文件>“中省略。

我尝试在界面中指定其他可见性方法并删除 ,但它们都失败了。Bazpublic

有没有办法通过界面做到这一点?如果没有,那么有没有办法我可以声明它,我也尝试过,但失败了。abstract

interface Baz
{
    public function qux();
}

class Bar implements Baz
{
    protected function qux()
    {
        //do foo
    }
}

class Foo extends Bar implements Baz
{
    private function qux()
    {
        parent::qux();
    }
}

答案 1

在接口中声明的方法应该是公共。定义具有接口的协定。任何非公共方法都是实现细节,这些方法不属于接口。顾名思义,实现细节应该进入实现接口的具体类中。

来自维基百科:

编程到接口

接口的使用允许一种称为接口编程的编程风格。这背后的想法是将编程逻辑基于所用对象的接口,而不是基于内部实现细节。对接口进行编程可减少对实现细节的依赖,并使代码更易于重用。[7]它使程序员能够稍后通过简单地将用于的对象与另一个实现相同接口的对象交换来更改系统的行为。


答案 2

接口是双方之间的契约,是他们如何通信的协议。

将方法设置为受保护或私有是没有意义的,因为另一方不会看到这些方法。


推荐