是否可以使用具有私有/受保护方法的接口?

tee*_*ink 68 php oop interface

PHP 5中是否可以使用具有私有/受保护方法的接口?

现在我有:

interface iService
{
    private method1();
}
Run Code Online (Sandbox Code Playgroud)

这引发了一个错误:

解析错误:语法错误,意外T_STRING,期待T_VARIABLE

我只想确认接口只能包含公共方法.

Pas*_*TIN 119

有关接口PHP手册页明确指出:

在接口中声明的所有方法都必须是公共的; 这是界面的本质.

我想这可以解释你得到的错误;-)


rya*_*day 20

接口用于描述实现该接口的类的公共方法.您永远不能在界面中拥有私有方法.假定接口中的任何方法都在使用中,不应更改.

接口是PHP链接,但这是OO编程的标准.

  • 在其他语言(例如 java )中,您可以在接口中使用访问修饰符。 (4认同)

Web*_*euw 9

通常,接口只能有公共成员,因为接口的唯一功能是继承.

来自PHPfreaks.com教程:

PHP5具有接口.不要与更一般意义上的接口混淆,interface关键字创建一个实体,可用于在类上强制执行公共接口,而不必像抽象类那样扩展它们.而是实现了一个接口.

接口与抽象类不同.首先,它们实际上不是课程.它们不定义属性,也不定义任何行为.接口中声明的方法必须在实现它的类中声明.

因为更一般意义上的接口是对象如何与其他代码交互的定义,所以必须将所有方法声明为public(请参阅本章中的可见性部分).使用抽象类,抽象方法可以具有任何可见性,但扩展类必须使其实现使用相同(或较弱)的可见性.实现接口将方法作为抽象方法添加到主题类中,未能实现它将导致如下错误:

致命错误:类SomeConcreteClass包含n个抽象方法,因此必须声明为abstract或实现其余的方法,抽象类可以实现接口.

  • 这太糟糕了.因为我希望接口所需的公共方法在抽象类中实现,它依赖于受接口强制执行的受保护方法.这样,抽象类可以提供公共接口,但是由子类来实现底层逻辑.合理? (4认同)
  • 好像你希望子类实现的方法是抽象的.然后任何子类必须实现它.但它与界面无关. (4认同)

jus*_*ody 6

接口是类型声明.一个类型是一组值,加上一组可以从外部进行的操作.私有方法不适合这张图片.

interface T {
  public /*int*/ function f(array $a);
}
interface U {
  public /*T*/ function g(T $t);
}

class C implements U {
    public function g(T $t) {
        ...
        $x = $t->f();
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

接口很有用,因为它们表示对象的接口.对象如何与其环境进行通信.

现在让我们说T::f可以宣布私有.这对其他对象有什么用?它不能从外部调用,它不会是它的界面的一部分.