Как сохранить константы в PHP?

Сейчас у меня есть большое количество постоянных строк и перечислений в моем проекте. С самого начала я использовал следующий подход (пример кода pseudo php):

class Constants implements iStatuses, iEmailTypes {
}

interface iStatuses {
    const STATUS_NEW = 1;
    cosnt STATUS_UPDATED =2;
    ...
}

interface iEmailTypes {
    const EMAIL_TYPE_NEW = 1;
    const EMAIL_TYPE_UPDATED =2;
    ...
}

Этот подход позволил мне получить мои константы следующим образом в любом месте кода, так как я включил класс констант в index.php.

$this->sendEmailByType(CONSTANTS::EMAIL_TYPE_NEW);

Однако я могу полностью увидеть недостатки подхода:

  • Класс констант перегружен множеством перечислений и констант, и очень сложно получить правильную константу. Соглашение об именах помогает решить проблему, но мне это не нравится, поскольку для определения того, что мне нужно, требуется дополнительное мышление.
  • Класс констант слишком велик и запутан.
  • Мне нужно отслеживать все интерфейсы, реализуемые классом Cosntants.

Так как мой проект становится намного больше, и нам нужно объединить его с другим кодом проекта, требуется изменить подход класса Constants. Однако у меня слишком много зависимостей, основанных на этом классе. Как мне переструктурировать этот подход, чтобы не сломать старый код, который использовал значения класса констант.

Пожалуйста, поделитесь своими мыслями и предложениями, как улучшить мой подход "константы" или подтвердить, что он прилично хорош, и я должен его поддерживать.

Спасибо заранее.

Ответ 1

Почему бы просто не иметь постоянные классы для каждого контекста. т.е.

class Statuses 
{
    const STATUS_NEW = 1;
    const STATUS_UPDATED =2;
    ...
}

class EmailTypes 
{
    const EMAIL_TYPE_NEW = 1;
    const EMAIL_TYPE_UPDATED =2;
    ...
}

Позже, когда вы или другие программисты хотите внести свой вклад в ваше приложение, они легко могут проверить связанные константы по предмету, который они ожидают, вместо этого глядя в большой пул констант.

.e.g разыскивая флаг вокруг типов электронной почты, я бы ожидал найти его в EmailType::, и если его там нет, уверенно добавить его в один класс.