Что такое PSR

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

PSR расшифровывается как PHP Standards Recommendations, что переводится как «Рекомендованные стандарты PHP». Эти стандарты создаются и поддерживаются сообществом опытных PHP-программистов со следующей целью: нужно писать код на языке PHP в одном стиле так, чтобы его без проблем могли читать другие программисты. Иными словами, это такой набор правил, следуя которым, код становится более понятным и единообразным, когда над ним работают несколько людей.

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

Какие стандарты бывают

Стандарты PSR разделены на несколько частей. Каждый из стандартов содержит в себе информацию о том, как следует делать какую-то часть в процессе программирования на PHP. Например: как ставить переносы строк, как должны именоваться переменные, как должна быть реализована автозагрузка. За эти разные части отвечают разные стандарты. Каждый стандарт начинается с аббревиатуры PSR, после которой идёт номер стандарта.

AUTOLOADING

Автозагрузчики упрощают включение файлов, сопоставляя пространства имен с путями файловой системы.

PSR-4: Autoloader

Этот PSR описывает спецификацию для автоматической загрузки классов из путей к файлам. Он полностью совместим и может использоваться в дополнение к любой другой спецификации автозагрузки, включая PSR-0. Этот PSR также описывает, где размещать файлы, которые будут загружаться автоматически в соответствии со спецификацией.

INTERFACES

Интерфейсы упрощают совместное использование кода между проектами, следуя ожидаемым контрактам.

PSR-3: Logger Interface

Основная цель — позволить библиотекам получать объект Psr\Log\LoggerInterface и записывать в него логи простым и универсальным способом. Фреймворки и CMS, которые имеют индивидуальные потребности, МОГУТ расширять интерфейс для своих собственных целей, но ДОЛЖНЫ оставаться совместимыми с этим документом. Это гарантирует, что сторонние библиотеки, которые использует приложение, могут записывать в централизованные журналы приложений.

PSR-6: Caching Interface

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

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

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

PSR-11: Container Interface

Целью, поставленной ContainerInterface, является стандартизация того, как фреймворки и библиотеки используют контейнер для получения объектов и параметров (называемых записями в остальной части этого документа).

Гипермедийные ссылки становятся все более важной частью Интернета как в контексте HTML, так и в контексте различных форматов API. Однако не существует ни единого общего формата гипермедиа, ни общего способа представления связей между форматами.

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

PSR-14: Event Dispatcher

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

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

PSR-16: Simple Cache

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

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

PSR-20: Clock

Создание стандартного способа доступа к часам позволит обеспечить взаимодействие во время тестирования, когда тестируется поведение, имеющее побочные эффекты, основанные на времени. Общие способы получить текущее время включают вызов \time() или новый \DateTimeImmutable('now').

HTTP

Совместимые стандарты и интерфейсы для независимого подхода к обработке HTTP-запросов и ответов как на стороне клиента, так и на стороне сервера.

PSR-7: HTTP Message Interfaces

Этот документ описывает общие интерфейсы для представления сообщений HTTP, как описано в RFC 7230 и RFC 7231, и URI для использования с сообщениями HTTP, как описано в RFC 3986.

Сообщения HTTP являются основой веб-разработки. Веб-браузеры и клиенты HTTP, такие как cURL, создают сообщения запроса HTTP, которые отправляются на веб-сервер, который предоставляет ответное сообщение HTTP. Серверный код получает сообщение запроса HTTP и возвращает сообщение ответа HTTP.

HTTP-сообщения, как правило, абстрагируются от конечного пользователя, но нам, как разработчикам, обычно необходимо знать, как они структурированы и как получить к ним доступ или манипулировать ими для выполнения наших задач, будь то запрос к HTTP API. или обработка входящего запроса.

PSR-15: HTTP Handlers

В этом документе описываются общие интерфейсы для обработчиков запросов HTTP-сервера («обработчики запросов») и компонентов промежуточного программного обеспечения HTTP-сервера («промежуточное ПО»), которые используют сообщения HTTP, как описано в PSR-7 или последующих заменяющих PSR.

Обработчики HTTP-запросов являются фундаментальной частью любого веб-приложения. Серверный код получает сообщение запроса, обрабатывает его и создает ответное сообщение. ПО промежуточного слоя HTTP — это способ перенести обычную обработку запросов и ответов с прикладного уровня.

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

PSR-17: HTTP Factories

В этом документе описывается общий стандарт для фабрик, создающих HTTP-объекты, совместимые с PSR-7.

В PSR-7 не включены рекомендации по созданию объектов HTTP, что приводит к трудностям при необходимости создания новых объектов HTTP внутри компонентов, не привязанных к конкретной реализации PSR-7.

Интерфейсы, описанные в этом документе, описывают методы, с помощью которых можно создавать экземпляры объектов PSR-7.

PSR-18: HTTP Client

Цель этого PSR — позволить разработчикам создавать библиотеки, не связанные с реализациями HTTP-клиентов. Это сделает библиотеки более пригодными для повторного использования, поскольку уменьшит количество зависимостей и снизит вероятность конфликтов версий.

Вторая цель состоит в том, что HTTP-клиенты могут быть заменены в соответствии с принципом подстановки Лисков. Это означает, что все клиенты ДОЛЖНЫ вести себя одинаково при отправке запроса.

CODING STYLES

Стандартизированное форматирование уменьшает когнитивные трения при чтении кода других авторов.

PER Coding Style

Эта спецификация расширяет, расширяет и заменяет PSR-12, расширенное руководство по стилю кодирования, и требует соблюдения PSR-1, основного стандарта кодирования.

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

Этот PSR стремится предоставить набор, который могут реализовать инструменты стиля кодирования, проекты могут декларировать приверженность, а разработчики могут легко связываться между различными проектами. Когда разные авторы сотрудничают в нескольких проектах, полезно иметь один набор руководящих принципов, который будет использоваться во всех этих проектах. Таким образом, преимущество этого руководства заключается не в самих правилах, а в том, что они делятся этими правилами.

PSR-12 был принят в 2019 году, и с тех пор в PHP был внесен ряд изменений, которые повлияли на рекомендации по стилю кодирования. В то время как PSR-12 содержит очень полный набор функций PHP, существовавших на момент написания, новая функциональность очень открыта для интерпретации. Таким образом, этот PER направлен на уточнение содержания PSR-12 в более современном контексте с доступными новыми функциями, привязку исправлений к PSR-12 и его дальнейшее обновление в соответствии с новыми данными и языковыми изменениями.

PSR-1: Basic Coding Standard

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

PSR-12: Extended Coding Style Guide

Эта спецификация дополняет, расширяет и заменяет PSR-2, руководство по стилю кодирования, и требует соблюдения PSR-1, основного стандарта кодирования.

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

Этот PSR стремится предоставить установленный способ, которым могут быть реализованы инструменты стиля кодирования, проекты могут заявлять о соблюдении, и разработчики могут легко связываться между различными проектами. Когда разные авторы сотрудничают в нескольких проектах, полезно иметь один набор руководящих принципов, который будет использоваться во всех этих проектах.

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

Написать комментарий