有可能有一个接口,有私有/受保护的方法?

有可能在PHP 5中有一个具有私有/受保护的方法的接口?

现在我有:

interface iService { private method1(); } 

这引发了一个错误:

parsing错误:语法错误,意外的T_STRING,期待T_VARIABLE

我只是想确认一个接口只能包含公共方法的情况。

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

在接口中声明的所有方法都必须是公共的,这是接口的本质。

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

接口用于描述实现该接口的类的公共方法。 你永远不可能有一个私人的方法在一个界面。 接口中的任何方法都被假定为正在使用,不应该被改变。

接口是PHP链接,但这是面向对象编程的标准。

通常一个接口只能有公共成员,因为接口的唯一function是被inheritance的。

来自PHPfreaks.com教程:

PHP5具有接口。 不要将其与接口混淆在一般意义上,接口关键字会创build一个实体,用于在类上实施通用接口,而不必像抽象类那样扩展它们。 而是实现一个接口。

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

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

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

接口是types声明。 一个types是一组值,再加上一组可以从外部进行的操作。 一个私人的方法不适合这张照片。

 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(); ... } } 

接口是有用的,因为它们说明了对象的接口。 物体如何与环境进行交stream。

现在让我们说T::f可以被声明为私有。 那对其他对象又会如何呢? 它不会从外部调用,它不会成为其界面的一部分。

在许多情况下,接口定义有助于其他模块保证类的行为和api,在这种情况下,私有的东西不是其他模块可以访问或只是理解的东西。 这就是为什么你永远不能把私人方法放在界面上。