PHP接口:指定任何可见性

The*_*ack 23 php oop interface abstract

我正在使用一组类的接口.我不过是因为我想对于任何一个问题,visibility在接口被允许(即:public,protectedprivate).

我需要父方法只受保护,我需要子方法是私有的,但我得到错误说

致命错误:接口方法的访问类型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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Gor*_*don 46

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

来自维基百科:

编程到界面

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


Jvd*_*erg 17

界面是两方之间的契约,协议是如何沟通的.

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