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
эти соглашения обычно соблюдаются в пакетах