PHP:在界面中设置私有、受保护、公共


PHP: Set private, protected, public in interface?

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

interface ExampleInterface
{
    function getId();
}

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

interface ExampleInterface
{
    public function getId();
}

它使接口更加严格,但这不是接口的用途吗?

接口中的私有函数有什么意义? 声明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

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

因此,如果您制作一个 私人promise ,这是无关紧要的,因为没有人关心是否有具有某些功能的私有方法,无论如何其他人都无法访问它。

另一方面,接口中的所有方法本质上都是公共的(因为它们只不过是对外部世界的承诺),因此您明确提及它是多余的public

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

接口只能有公共成员,因此无需声明它。这些功能是要继承的。因此;接口中声明的所有方法都必须是公共的,这是它的性质

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

我知道这是对外界的"承诺",但如果某些东西实现了接口,该方法将受到保护,因此仍然保留了相同的"承诺"。它指出有函数 a、函数 b 和受保护的函数 c,因此我们由此得出如果我不扩展/实现它,那么我就无法访问函数 c。因为当你读课时它的工作原理是一样的。

@AlphaMale 好的,那么界面的意义何在?它用于为类创建"食谱",对吗?因此,当您在代码中实际使用它时,它只会实现和强制方法。如果您的代码需要方法才能工作,并且您不想将其强制到特定类,这将变得很方便。

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

私有是有意义的,因为只有接口知道这些值,并且由于接口不能做任何事情,这将毫无意义。