有可能有一个接口,有私有/受保护的方法?
有可能在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,在这种情况下,私有的东西不是其他模块可以访问或只是理解的东西。 这就是为什么你永远不能把私人方法放在界面上。