PHPのインターフェースにはプロパティがありますか、それともメソッドしかありませんか?
「プロパティ」の意味に依存します。実際のフィールドを意味する場合、いいえ、そうではありません。 C#のプロパティなどを参照している場合は可能です(プロパティアクセサーはアクセサーメソッドの構文糖衣であるため)。イベントについても同じことが言えます(もちろん、それぞれの場合、get
/set
またはadd
/remove
アクセサーの実装は指定されていません)。
更新:PHPにはget
/set
アクセッサの意味でプロパティがないため、質問に対する答えはいいえ。インターフェイスは独自のデータ/状態を伝送できません。
PHPのインターフェイスは、メソッド本体のないpublicメソッドsignaturesのみを含むことができます。定数も含むことができます。しかし、それだけです。 。他に何もありません。
http://www.php.net/manual/en/language.oop5.interfaces.php を参照してください
インターフェイスは、標準のクラスと同じ方法でinterfaceキーワードを使用して定義されますが、コンテンツが定義されたメソッドはありません。 […]インターフェイスで宣言されるすべてのメソッドはパブリックでなければなりません。これはインターフェイスの性質です。 […]インターフェイスが定数を持つ可能性があります。インターフェース定数は、それを継承するクラス/インターフェースでオーバーライドできないことを除いて、クラス定数とまったく同じように機能します。
PHPインターフェイスには定数を含めることができますが、プロパティ(インスタンス変数)を含めることはできません。 「プロパティ」を変更する必要がない場合は、代わりに定数を使用できます。
インターフェイスのプロパティをDocBlockで宣言できます。 IDEはインターフェイスのこれらのプロパティを示唆します(PhpStormはそうします)が、これは実装クラスのこれらのフィールドの実際の実装を強制しません。例.
/**
* @property string $password
* @property string $username
*/
interface IUserDocument
{
}