PHP:在界面中设置private,protected,public?

时间:2012-05-28 11:03:54

标签: php interface coding-style

当我浏览GitHub时,大多数项目都以这种方式在界面中定义方法:

interface ExampleInterface
{
    function getId();
}

现在我的问题是为什么在界面中定义方法可见性是不好的风格:

interface ExampleInterface
{
    public function getId();
}

它使接口更严格,但不是那个接口用于什么?

5 个答案:

答案 0 :(得分:11)

界面中私有函数的意义是什么?声明public是多余的。

来自TFM的

All methods declared in an interface must be public, this is the nature of an interface.

http://php.net/manual/en/language.oop5.interfaces.php

答案 1 :(得分:4)

这是因为接口是您向外界提供某些功能的承诺。在上面的示例中,每当类实现一个接口时,它都保证该类将向外界提供一个名为getId的方法,而不管它是如何实现的。

因此,如果您创建私有promise,则无关紧要,因为没有人关心是否存在具有某些功能的私有方法,否则任何其他人都无法访问它。

另一方面,界面中的所有方法基本上都是公开的(因为它们只是对外界的承诺),因此你明确地提到它是public是多余的。

答案 2 :(得分:2)

接口只能包含公共方法,因此公共有点多余。

答案 3 :(得分:2)

界面只能包含公开成员,因此无需声明。这些功能意味着继承。因此; 界面中声明的所有方法都必须是公共的,这就是它的性质 ..

答案 4 :(得分:0)

我可以理解私人不能工作但也受到保护吗?

我理解这是"承诺"对于外部世界但是如果某些东西实现了一个接口,那么该方法将保持受到保护,因此同样的#34;承诺"仍然保持着。它声明有函数a,函数b和受保护的函数c,因此我们得出如果我没有扩展/实现它,那么我就无法访问函数c。因为在阅读课程时它的工作原理相同。

@AlphaMale那么接口有什么意义呢?它用于创建一个"配方"对于一堂课吧?因此,当您在代码中实际使用它时,它只会实现并强制使用方法。如果您的代码需要使用方法并且您不想强制它到特定的类,这会变得很方便。

让我们说我有一个创建邮件程序,但我必须在需要邮件的主要流程,但邮件程序将使用不同的方式来构建这些邮件。现在需要一个基本发送功能,它接收一个消息(任何类型)和一个电子邮件地址,但由于这些类处于开放环境中,所以将这个发送功能保持公开是危险的,因此我们需要它作为受保护的方法。现在在两个进程中有多个邮件程序,但每个进程共享相同的构造方法的方式,因此有2个抽象类但现在由于有限的接口,你现在必须声明第三个抽象类来包含这个受保护的发送函数,以便它也可以扩展,否则你将拥有相同的受保护发送功能。如果新开发人员在一个全新的进程上工作并查看该接口,则永远不会强制发送函数。如果我们说可以在界面中声明受保护,那么如果你检查某些东西是否是一个接口,它将与一个类一样工作,你仍然无法访问受保护的函数。

Private是有道理的,因为只有接口才会知道这些值,因为接口无法做任何事情,这将毫无意义。