---

name: Линтер
theory: |
  Теперь, когда мы уже научились писать простые программы, можно немного поговорить о том, как их писать.

  Код нужно оформлять определённым образом, чтобы он был достаточно понятным и простым в поддержке. Специальные наборы правил — стандарты — описывают различные аспекты написания кода. Конкретно в PHP самым распространенными являются стандарты **PSR** (PHP Standards Recommendations или стандартные рекомендации PHP) от [PHP-FIG](https://www.php-fig.org/psr/). Рекомендация представляет из себя набор правил, призванных облегчить определённую сторону разработки (или решить какую-то определённую проблему). На текущий момент существует несколько утверждённых рекомендаций, каждая из них обозначена цифрой: PSR-1, PSR-2, PSR-3 и [другие](https://en.wikipedia.org/wiki/PHP_Standard_Recommendation). Со всеми этими рекомендациями вы будете постепенно знакомиться во время обучения и работы. Сейчас же остановимся на двух основных:

  * PSR-1: [Basic Coding Standard](https://www.php-fig.org/psr/psr-1/) (Базовый стандарт написания кода). Это набор правил, определяющих, как следует оформлять программный код: как писать теги PHP, по каким правилам именовать классы, методы и константы классов. Он также затрагивает вопросы кодировки, автозагрузки, пространства имён и разделения ответственности между файлами. Это базовые правила, стандарт PSR-12 их расширяет.
  * PSR-12: [Extended Coding Style](https://www.php-fig.org/psr/psr-12/) (Расширенный стандарт стиля кодирования, заменяет и дополняет устаревший PSR-2). Во-первых, этот стандарт требует выполнения правил PSR-1. Во-вторых, он добавляет множество новых требований: к отступам, файлам, строкам, ключевым словам, классам, управляющим конструкциям, области видимости и другим элементам.

  В любом языке программирования существуют специальные инструменты, так называемые **линтеры**, которые проверяют код на соответствие стандартам. Повсеместно используемым линтером в PHP является [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer).

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

  ```php
  <?php

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

  ?>
  ```

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

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

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

  ```php
  <?php

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

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

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

instructions: |

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

tips: []
