Как реализовать перечисления в PHP?

PHP, Вопросы и ответы
23 февраля 2012

Вопрос

Насколько мне известно, в PHP нет встроенной поддержки перечислений. (Это такой тип данных, который представляет собой набор из именованных целочисленных констант).
Но я пришёл в PHP из Java, и привык использовать перечисления в своих проектах. Особенно очень удобно использовать их в какой-нибудь IDE, в которой есть средство автозавершения кода.

В принципе, константы подходят для этой роли, но с их использованием появляется проблема именного пространства, потому что они глобальные. У массивов нет этой проблемы, но поскольку их значения могут быть переопределены в любой момент, то IDE не подхватывает их и не делает подсказок для ключей этих массивов.

Есть ли какое-нибудь решение, которое Вы обычно используете? Или это никому не нужно? :)


Ответ №1

Обычно, в подобных ситуациях я делаю так:

class DaysOfWeek
{
    const Sunday = 0;
    const Monday = 1;
    // etc.
}
var $today = DaysOfWeek::Sunday;

Также класс DaysOfWeek можно сделать абстрактным (добавив перед его описанием слово abstract), тогда этот класс нельзя будет унаследовать.

1 комментарий

  • Riffi:

    «Также класс DaysOfWeek можно сделать абстрактным (добавив перед его описанием слово abstract), тогда этот класс нельзя будет унаследовать.»
    Не путайте народ. Абстрактный класс для того и сделан, чтобы наследоваться. Нельзя создать его экземпляр.

Добавить комментарий


(обязательно)