Соглашения об именах PHP об абстрактных классах и интерфейсах

Если абстрактный класс всегда префикс с Abstract и суффикс с Interface (когда он является интерфейсом)? Существует ли стандартное соглашение об именах, подобное PSR-0 для структуры папок/пространств имен, но для классов?

Ответ 1

Для этого нет конвенции; особенно в PHP. Это может быть организовано, как вам угодно.

С добавлением пространств имен в PHP 5.3 я не вижу необходимости добавлять префиксы Abstract или Interface/suffixes к фактическим именам классов.

Просто называйте вещи такими, какие они есть!

Ответ 2

Несмотря на отсутствие какого-либо соглашения, я считаю, что это хорошая практика с использованием префикса Abstract и суффикса Interface для соответствующих компонентов. Это помогает лучше понять код с первого взгляда, ИМО.

Ответ 3

Соглашения - это то, что вы их видите: сам язык не заставляет каких-либо соглашений, кроме тех, которые делают синтаксический анализатор в состоянии читать ваш код. В принципе, для всех ваших проектов вы должны иметь собственные настройки для конкретного проекта или, лучше всего. Однако работа в группах разных людей может привести к тому, что соглашения не будут соблюдаться, это действительно зависит от программистов.

По моему опыту, я бы предложил следующее что-то вроде "дизайн-контракт". Назовите свои контракты (интерфейсы), как вы бы назвали ваш класс реализации, а затем дадите своей реализации более конкретное имя (или откройте MyContractNameImpl, известный в основном из Java, я думаю). Кроме того, многие современные IDE знают, является ли ваш класс интерфейсом или абстрактным, поэтому на самом деле нет необходимости указывать его на свое имя. Я также считаю, что контракты под названием "IMyContract" не очень хорошие, по тем же причинам.

Ответ 4

Именование ваших абстрактных классов и интерфейса с помощью:

  • Абстрактные *
  • * Интерфейс

Будет держать вашу кодовую базу чистой, красивой и очевидной для вашей команды, каковы прототипы, каковы контракты и каковы конкретные реализации.

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

Несмотря на то, что группа FIG не предлагает соглашение об именах для абстрактных классов и интерфейсов - если вы изучите основные PHP-проекты с открытым исходным кодом, вы увидите, что почти все они используют это соглашение.