Хм, PSR?

Если Вы - заядлый разработчик PHP, вполне вероятно, что когда-нибудь столкнетесь с аббревиатурой PSR - “PHP Standards Recommendation” (Стандарты кодирования PHP). На данный момент, существует 4 версии стандарта: от PSR-0 до PSR-3. Рассмотрим что это такое и зачем они нужны.

Краткая история

В PHP никогда не было единого стандарта для написания кода. Те разработчики, которые используют различные кодовые базы, затрачивают лишнее время на выдумку собственных правил именований и стиля кодирования. Некоторые из них перенимают готовые стандарты, такие как PEAR или Zend Framework, другие же пишут как хотят.

The Framework Interoperability Group (Группа концепции совместимости)

В 2009 году на конференции php|tek люди, представляющие различные проекты, обсуждали некоторые параметры этих проектов. Неудивительно, что главной темой для обсуждений было предложение придерживаться ряда стандартов.

До недавнего времени эти люди называли себя “Группа стандартов PHP” (PHP Standards Group), теперь-же они работают под маркой “Группа концепций совместимости” (Framework Interoperability Group (FIG)) Им показалось, что первоначальное название не совсем точно описывает цель их группы. С новым именованием, группа стала больше связана с фрэймворкам. Разработчики, представляющие всевозможные проекты были также приняты в группу в качестве людей с правом голоса.

FIG намерена принимать в группу не только фрэймворк-разработчиков, но и сторонников других подходов программирования на PHP. Например, у каждого из фреймворков, таких как Symfony, Lithium и CakePHP есть свой представитель с правом голоса, то же самое касается PyroCMS, phpDocumentor, и даже Composer.

“Члены группы с правом голоса могут участвовать в голосовании, в то же время, любой человек (даже Вы!) может влиться в сообщество PHP-FIG, просто подписавшись на рассылку PHP-FIG mailing list.”

Там проводятся дискуссии и голосования, рассматриваются предложения и принимаются отзывы.

Цель

Цель группы FIG - создать обсуждение между разработчиками различных проектов, с целью найти общие концепции для дальнейшей совместной работы. На момент написания статьи обсуждалось четыре стандарта кодирования PHP: от PSR-0 до PSR-3.

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

PSR-0: Стандартный Автозагрузчик

Помните, как Вам приходилось задавать множество выражений require, чтобы подключить все необходимые классы? К счастью, с возникновением магической функции __autoload() в PHP 5-ом, в этом больше нет необходимости. В PHP 5.1.2. автозагрузка еще более упрощена: благодаря функции spl_autoload(), которая позволяет создавать цепочки автозагрузок ряда функций при помощи spl_autoload_register().

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

Написание отдельного (собственного) автозагрузчика, знающего, откуда брать все необходимые ему полные имена и проверять расширения файлов (.class.php, inc.php, .php и др.) приведет к беспорядку! Без следования стандартов, определяющих как называть классы и где их хранить, а автозагрузке вообще нет необходимости и смысла.

“Встречайте PSR-0 - стандарт, описывающий “Обязательные требования, которые необходимо соблюдать для работы автозагрузчика”

PSR-0 - это шаг навстречу возможности использовать код многократно. Если проект составлен по стандартам PSR-0 и его компоненты практически не связаны, Вы просто можете поместить эти компоненты в каталог и, используя автозагрузчик PSR-0, подключить их к проекту. А вот вариант получше - воспользуйтесь Composer-ом и он сделает это за Вас!

Например, Laravel использует два компонента Symfony (для работы с Консолью и HttpFoundation).

У FIG есть пример реализации функции PSR-0, совместимой с автозагрузчиком, которую можно зарегистрировать с помощью spl_autoload_register(), но Вы можете использовать и другие, удобные Вам методы, например, как Symfony ClassLoader или автозагрузчик Composer.

PSR-1: Основной Стандарт Кодирования.

После принятия стандартов PSR-0, FIG долгое время не вводил ничего нового. Действительно, PSR-1 и PSR-2 были одобрены лишь через год-полтора.

PSR-1 описывает основной стандарт кодирования. Он не детализирован. Для “обеспечения наилучшего технического взаимодействия между разделенными фрагментами PHP кода” был создан набор правил.

  • Используются только теги <?php и <?=
  • Используется только UTF-8 (никаких BOM для PHP кода).
  • Разделение выполнения задач по различным источникам (генерация выходных параметров, доступ к базе данных и др.)
  • Соблюдаются стандарты PSR-0.
  • Имена классов определяются в стиле CamelCase, начиная с заглавной буквы.
  • Константы классов должны быть написаны в верхнем регистре с знаком подчёркивания в качестве разделителей слов.
  • Методы классов определяются в стиле camelCase, начиная с прописной буквы.

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

PSR-2: Стандарты Оформления Кода (Гид по Стилю Кодирования)

PSR-2 - это расширение стандартов PSR-1. Главная цель - создание общего стиля кодирования в PHP, что приведет к единому отформатированному коду.

Правила оформления кода были введены после обширного исследования, проведенного членами группы FIG.

Правила, согласованные с участниками группы PSR-2, не отражают предпочтения каждого PHP разработчика. Это и не требуется , так как ещё только при создании группы, сообщество PHP-FIG утверждало, что правила были созданы для себя, а всем желающим работать по этим правилам они будут только рады.

Полное описание PSR-2 можно найти в архиве стандартов fig.

В идеале каждый PHP-проект должен соответствовать стандартам PSR-1 и PSR-2. Однако, из-за того, что у каждого разработчика свой вкус (например, “правило именование Х лучше, чем У” или “вместо пробелов используется табуляция!”) и из-за других причин очень мало PHP-проектов пишутся согласно стандартам PSR-1 и PSR-2.

PSR-3: Интерфейс типа Logger

Стандарт кодирования PHP #3 является последним дополнением к уже принятым стандартам FIG. Он был утвержден 27 декабря 2012 года с перевесом голосов 18:0 (8 членов группы воздержались).

PSR-3 описывает типы лог сообщений, согласно уровню их важности (The Syslog (RFC 5424)): отладка (debug), информационное сообщение (notice), замечание (notice), предупреждение (warning), ошибка (error), критический уровень (critical), тревога (alert) и авария (emergency).

Другими словами, если ваша система лог-сообщений придерживается стандартов PSR-3, то вы можете смело представить её на суд общественности, а так же внедрять в другие проекты.

Недавно Monolog воспользовался стандартом PSR-3 при создании компонента Psr\Log\LoggerInterface, согласно правилам, изложенным в документе PSR-3.

Критический обзор

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

Большая часть критики и порицаний идет со стороны уже после того как стандарты утверждены, даже несмотря на то, что сами стандарты формируются в mailing list-е (который позволяет любому пользователю присоединиться, оставить свой отзыв, комментарий или предложение). Если Вы считаете, что у Вас есть ценная идея, не стесняйтесь - открывать новые темы в mailing list-е.

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

“Достаточно каждому разработчику немного придержать свои амбиции, и у нас появляется единый стиль кодирования”

Будущее

С ростом числа членов группы с правом голоса и выпуском четырёх стандартов, FIG становится все более весомы в сообществе PHP. Уже сейчас широко применяется стандарт PSR-0. Надеемся, что PSR-1 и PSR-2 так же станут популярными и часто используемыми.

С выходом PSR-3, FIG ввел нечто новое в стандарты кодирования. Они продолжают работать в этом направлении, т.к. сейчас в mailing list-е ведутся обсуждения других подобных вопросов.

В настоящий момент там ведется интересная дискуссия HTTP Message Package, для создания общих правил и принципов работы HTTP-клиента. Не так активно, но всё же идут обсуждения о кэш-интерфейсе.

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

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/7YiPiiYosC4/lessons.php

Читать комменты и комментировать

Добавить комментарий / отзыв



Защитный код
Обновить

Хм, PSR? | | 2013-07-22 21:16:04 | | Статьи Web-мастеру | | Если Вы - заядлый разработчик PHP, вполне вероятно, что когда-нибудь столкнетесь с аббревиатурой PSR - “PHP Standards Recommendation” (Стандарты кодирования PHP). На данный момент, существует 4 | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: