Линтер

Код нужно оформлять определённым образом, чтобы он был достаточно понятным и простым в поддержке. Специальные наборы правил — стандарты — описывают различные аспекты написания кода. Конкретно в PHP самым распространенными являются стандарты PSR (PHP Standards Recomendations - Стандартные рекомендации PHP) от PHP-FIG. Рекомендация представляет из себя набор правил, призванных облегчить определённую сторону разработки (или решить какую-то определённую проблему). На текущий момент существует несколько утверждённых рекомендаций, каждая из них обозначена цифрой: PSR-1, PSR-2, PSR-3 и другие. Со всеми этими рекомендациями вы будете постепенно знакомиться во время обучения и работы. Сейчас же остановимся на первых двух:

  • PSR-1: Basic Coding Standard (Базовый стандарт кодирования). Это набор правил, определяющих как следует оформлять программный код: как писать теги PHP, по каким правилам именовать классы, методы и константы классов, вопросы кодировки, автозагрузки, пространств имён и разделения ответственности между файлами. Это базовые правила, стандарт PSR-2 их расширяет.
  • PSR-2: PSR-2: Coding Style Guide (Руководство по стилю кодирования). Во-первых, этот стандарт требует выполнения правил PSR-1. Во-вторых, он добавляет множество новых требований: к отступам, файлам, строкам, ключевым словам, классам, управляющим конструкциям, области видимости и другим элементам.

В любом языке программирования существуют специальные инструменты — так называемые линтеры. Они проверяют код на соответствие стандартам. Повсеместно используемым линтером в PHP является PHP_CodeSniffer.

Допустим, у нас есть файл с таким php-кодом:

<?php

  print_r (((8 / 2) + 5) - (-3 / 2)); // на этой строчке отступ равен одному табу

?>

При проверке файла линтер найдёт следующие ошибки:

  • Spaces must be used to indent lines; tabs are not alowed — PSR-2 рекомендует делать отступ, размером в четыре пробела, а в примере выше использована табуляция
  • A closing tag is not permitted at the end of a PHP file — стандарт содержит требование опускать завершающий тег ?>
  • Space before opening parenthesis of function call prohibited — при вызове функции между именем функции и круглыми скобками не должно быть пробельных символов, а в проверяемом коде после имени print_r стоит один пробел

Исправим код, убрав закрывающий тег, отступы и пробел после имени функции:

<?php

print_r(((8 / 2) + 5) - (-3 / 2)); // => 10.5

Этот вариант уже не нарушает правил, и линтер будет «молчать».

Не “пугайтесь” обилию рекомендаций и правил. Большинство правил просты и понятны. Скорее всего вы итак будете интуитивно придерживаться их в коде. С остальными вам помогут справиться время, опыт и линтер ;)

Задание

Проанализируйте этот код:

<?php

print_r (3 ** (4 - 2));

?>

В нём нарушено два правила, которые мы рассмотрели в предыдущем примере. Перепишите код, исправив стилевые ошибки.

Сайт сейчас не будет проверять ваш код линтером, но в ваших будущих практиках на Хекслете и в реальной разработке линтер будет работать и сообщать вам о нарушениях.

Упражнение доступно только авторизованным пользователям.

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