PHP: я могу использовать поля в интерфейсах?

В PHP я могу определить интерфейс, чтобы иметь поля, или интерфейсы PHP ограничены функциями?

<?php
interface IFoo
{
    public $field;
    public function DoSomething();
    public function DoSomethingElse();
}
?>

В противном случае я понимаю, что могу представить метода get как функцию в интерфейсе:

public GetField();
43
задан Scott 12 February 2010 в 11:52
поделиться

3 ответа

Вы не можете указать участников. Вы должны указать их присутствие через геттеры и сеттеры, как и вы. Однако вы можете указать константы:

interface IFoo
{
    const foo = 'bar';    
    public function DoSomething();
}

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

48
ответ дан 26 November 2019 в 22:42
поделиться

Интерфейсы предназначены только для поддержки методов.

Это связано с тем, что интерфейсы существуют для предоставления общедоступного API, к которому затем могут получить доступ другие объекты.

Общедоступные свойства фактически нарушили бы инкапсуляцию данных внутри класса, реализующего интерфейс.

14
ответ дан 26 November 2019 в 22:42
поделиться

Вы не можете определять свойства в интерфейсе : разрешены только методы (и это имеет смысл, поскольку цель интерфейса - указать API)


В PHP попытка определить свойства в интерфейсе должна вызвать фатальную ошибку: эта часть кода:

interface A {
  public $test;
}

даст вам:

Fatal error: Interfaces may not include member variables in...
5
ответ дан 26 November 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: