PHP接口:指定任何可见性

时间:2012-10-15 15:00:44

标签: php oop interface abstract

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

我需要父方法才能受到保护,我需要将子方法设为私有,但我收到的错误是

  

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

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

我有办法通过界面做到吗?如果没有,那么我有没有办法宣布它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();
    }
}

3 个答案:

答案 0 :(得分:45)

您在Interfaces中声明的方法应该是公开的。您可以使用界面定义合同。任何非公共方法都是实现细节,而不属于接口。

来自维基百科:

  

编程到界面

     

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

答案 1 :(得分:15)

接口是两方之间的合同,是他们如何沟通的协议。

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

答案 2 :(得分:0)

开发人员禁用了更多流体再利用的可见性。通过关键字implements,您已将接口绑定到类。如果没有实现它,你就无法访问界面。