Если абстрактный класс всегда префикс с Abstract
и суффикс с Interface
(когда он является интерфейсом)? Существует ли стандартное соглашение об именах, подобное PSR-0 для структуры папок/пространств имен, но для классов?
Соглашения об именах PHP об абстрактных классах и интерфейсах
Ответ 1
Для этого нет конвенции; особенно в PHP. Это может быть организовано, как вам угодно.
С добавлением пространств имен в PHP 5.3 я не вижу необходимости добавлять префиксы Abstract
или Interface
/suffixes к фактическим именам классов.
Просто называйте вещи такими, какие они есть!
Ответ 2
Несмотря на отсутствие какого-либо соглашения, я считаю, что это хорошая практика с использованием префикса Abstract
и суффикса Interface
для соответствующих компонентов. Это помогает лучше понять код с первого взгляда, ИМО.
Ответ 3
Соглашения - это то, что вы их видите: сам язык не заставляет каких-либо соглашений, кроме тех, которые делают синтаксический анализатор в состоянии читать ваш код. В принципе, для всех ваших проектов вы должны иметь собственные настройки для конкретного проекта или, лучше всего. Однако работа в группах разных людей может привести к тому, что соглашения не будут соблюдаться, это действительно зависит от программистов.
По моему опыту, я бы предложил следующее что-то вроде "дизайн-контракт". Назовите свои контракты (интерфейсы), как вы бы назвали ваш класс реализации, а затем дадите своей реализации более конкретное имя (или откройте MyContractNameImpl, известный в основном из Java, я думаю). Кроме того, многие современные IDE знают, является ли ваш класс интерфейсом или абстрактным, поэтому на самом деле нет необходимости указывать его на свое имя. Я также считаю, что контракты под названием "IMyContract" не очень хорошие, по тем же причинам.
Ответ 4
Именование ваших абстрактных классов и интерфейса с помощью:
- Абстрактные *
- * Интерфейс
Будет держать вашу кодовую базу чистой, красивой и очевидной для вашей команды, каковы прототипы, каковы контракты и каковы конкретные реализации.
Соглашения об именах предназначены для увеличения нашей производительности в любых обстоятельствах, поэтому "имя, которое вам нравится" далека от хорошей идеи.
Несмотря на то, что группа FIG не предлагает соглашение об именах для абстрактных классов и интерфейсов - если вы изучите основные PHP-проекты с открытым исходным кодом, вы увидите, что почти все они используют это соглашение.