PHP接口有属性吗?

nev*_*ame 60 php oop methods interface

PHP中的接口是否具有属性,还是只有方法?

Wil*_*den 34

这取决于你所说的"属性".如果你的意思是实际的字段,那么不,他们不是.如果您指的是C#中的属性,那么它们可以(因为属性访问器无论如何都是访问器方法的严格语法糖).事件也是如此(当然,在每种情况下,都没有为get/ setadd/ remove访问器指定实现).

更新:由于PHP没有get/ setaccessors 意义上的属性,因此您的问题的答案是否定的.接口不能携带自己的数据/状态.

  • 常量被认为是某些圈子中的数据.因人而异 (5认同)
  • @ nickl-那些圈子很疯狂,因为状态变化,常数不会. (3认同)

Gor*_*don 19

PHP中的接口可能只包含没有方法体的公共方法签名.它们也可能包含常量.但就是这样.没有其他的.

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

接口使用interface关键字定义,与标准类相同,但没有任何定义其内容的方法.[...]接口中声明的所有方法都必须是公共的,这是接口的本质.[...]接口可能有常量.接口常量的工作方式与类常量完全相同,只是它们不能被继承它的类/接口覆盖.


Joh*_*ess 14

PHP接口可以有常量,但不能有属性(实例变量).如果您不需要修改"属性",则可以使用常量.


Jos*_*ábl 13

您可以在DocBlock中为接口声明属性.然后,IDE会提示接口的这些属性(PhpStorm会这样做),但这不会强制实现类中这些字段的实际实现.E. g.

/**
 * @property string $password
 * @property string $username
 */
interface IUserDocument
{


}
Run Code Online (Sandbox Code Playgroud)