PHP в именовании про абстрактные классы и интерфейсы

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

5 ответов


для этого нет соглашения; особенно в PHP. Все это может быть организовано так, как вы хотите.

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

просто назовите вещи, как они есть!


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


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

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


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

  • Аннотация*
  • интерфейс

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

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

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


проект PHP-FIG действительно предлагает соглашение об именах через соглашение об именах PSR" ByLaw"https://www.php-fig.org/bylaws/psr-naming-conventions/

в нем говорится:

  • интерфейсы должны быть суффиксами интерфейса: например Psr\Foo\BarInterface

  • абстрактные классы должны иметь префикс Abstract: например Psr\Foo\AbstractBar

  • черты должны быть суффиксами по признакам: например,Psr\Foo\BarTrait

эти соглашения обычно соблюдаются в пакетах