В PHP я могу определить интерфейс, чтобы иметь поля, или интерфейсы PHP ограничены функциями?
<?php
interface IFoo
{
public $field;
public function DoSomething();
public function DoSomethingElse();
}
?>
В противном случае я понимаю, что могу представить метода get как функцию в интерфейсе:
public GetField();
Вы не можете указать участников. Вы должны указать их присутствие через геттеры и сеттеры, как и вы. Однако вы можете указать константы:
interface IFoo
{
const foo = 'bar';
public function DoSomething();
}
См. http://www.php.net/manual/en/language.oop5.interfaces.php
Интерфейсы предназначены только для поддержки методов.
Это связано с тем, что интерфейсы существуют для предоставления общедоступного API, к которому затем могут получить доступ другие объекты.
Общедоступные свойства фактически нарушили бы инкапсуляцию данных внутри класса, реализующего интерфейс.
Вы не можете определять свойства в интерфейсе
: разрешены только методы (и это имеет смысл, поскольку цель интерфейса - указать API)
В PHP попытка определить свойства в интерфейсе должна вызвать фатальную ошибку: эта часть кода:
interface A {
public $test;
}
даст вам:
Fatal error: Interfaces may not include member variables in...