PHP: Линтер
Когда разные разработчики пишут код в разном стиле, код становится трудночитаемым: где-то пробел лишний, где-то отступы разные. Чтобы избежать разногласий, программисты договорились соблюдать единый стиль кодирования. Этот свод правил описывает, как должен выглядеть код: расстановку пробелов, оформление функций и названия переменных.
Единый стиль означает код, одинаково понятный всем членам команды, независимо от того, кто его написал. Это экономит время, снижает количество ошибок и упрощает совместную работу.
Стандарты кодирования
В PHP самыми распространенными являются стандарты PSR — PHP Standards Recommendations или стандартные рекомендации PHP от PHP-FIG. Это набор правил, которые облегчают разработку и решают определенную проблему.
На текущий момент существует несколько утвержденных рекомендаций, каждая из них обозначена цифрой: PSR-1, PSR-2, PSR-3 и другие. Со всеми рекомендациями вы познакомитесь во время обучения и работы. В этом уроке разберем подробнее следующие:
- PSR-1. Basic Coding Standard — базовый стандарт написания кода. Это набор правил, которые определяют, как следует оформлять программный код: как писать теги PHP, по каким правилам именовать классы, методы и константы классов. Он также затрагивает вопросы кодировки, автозагрузки, пространства имен и разделения ответственности между файлами
- PSR-12. Extended Coding Style — расширенный стандарт стиля кодирования, заменяет и дополняет устаревший PSR-2. Этот стандарт требует выполнения правил PSR-1. Также он добавляет множество новых требований: к отступам, файлам, строкам, ключевым словам, классам, управляющим конструкциям, области видимости и другим элементам
Эти стандарты знают и используют все PHP-разработчики. Новичкам полезно время от времени заглядывать в них и вырабатывать правильные привычки с самого начала. Однако запоминать все сразу нет необходимости.
Линтеры: автоматическая проверка кода
Запоминать все правила вручную не нужно. Существуют специальные программы, которые делают это за вас. Они называются линтеры.
Линтер представляет собой инструмент, который анализирует ваш код и сообщает о нарушениях стандартов. Он помогает:
- Избавиться от лишних пробелов
- Соблюдать отступы
- Писать читаемые и красивые выражения
В мире PHP широко используются два инструмента: PHP_CodeSniffer, который проверяет код на соответствие стандартам, и PHP CS Fixer, который умеет не только находить нарушения, но и исправлять их автоматически. В этом курсе используется PHP CS Fixer.
Рассмотрим пример:
<?php
print_r(1+ 3);Такой код выглядит неаккуратно, и линтер справедливо укажет на ошибку. Вот как выглядит процесс проверки:
Код Линтер Результат
┌────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ print_r( │ → │ PHP CS Fixer │ → │ binary_operator_ │
│ 1+ 3) │ │ │ │ spaces │
└────────────┘ └──────────────┘ └──────────────────────┘Это значит, что перед и после + не хватает пробелов. Согласно стандарту, должно быть так:
<?php
print_r(1 + 3);Правила и их смысл
Каждое сообщение линтера связано с конкретным правилом. Допустим, у нас есть файл с таким 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
print_r(((8 / 2) + 5) - (-3 / 2)); // => 10.5Этот вариант уже не нарушает правил, и линтер будет «молчать». Когда вы только начинаете, такие мелочи могут казаться неважными. Но со временем становится понятно, что именно они формируют единый читаемый стиль.
Использование линтера в своих проектах
Когда вы начнете писать собственные проекты за пределами учебной платформы, линтер будет незаменимым помощником. Его можно настроить в любом редакторе кода, запустить в терминале или подключить к сборке проекта. Линтер показывает ошибки, а PHP CS Fixer умеет и исправлять их автоматически.
Задание
Вы получили код от коллеги — он работает правильно, но нарушает стандарт оформления PSR-12. Исправьте пробелы вокруг операторов, не меняя логику:
<?php
print_r( (5 **2)-(3* 7));Результат должен остаться 4.
Полезное
PHP: Линтер
Когда разные разработчики пишут код в разном стиле, код становится трудночитаемым: где-то пробел лишний, где-то отступы разные. Чтобы избежать разногласий, программисты договорились соблюдать единый стиль кодирования. Этот свод правил описывает, как должен выглядеть код: расстановку пробелов, оформление функций и названия переменных.
Единый стиль означает код, одинаково понятный всем членам команды, независимо от того, кто его написал. Это экономит время, снижает количество ошибок и упрощает совместную работу.
Стандарты кодирования
В PHP самыми распространенными являются стандарты PSR — PHP Standards Recommendations или стандартные рекомендации PHP от PHP-FIG. Это набор правил, которые облегчают разработку и решают определенную проблему.
На текущий момент существует несколько утвержденных рекомендаций, каждая из них обозначена цифрой: PSR-1, PSR-2, PSR-3 и другие. Со всеми рекомендациями вы познакомитесь во время обучения и работы. В этом уроке разберем подробнее следующие:
- PSR-1. Basic Coding Standard — базовый стандарт написания кода. Это набор правил, которые определяют, как следует оформлять программный код: как писать теги PHP, по каким правилам именовать классы, методы и константы классов. Он также затрагивает вопросы кодировки, автозагрузки, пространства имен и разделения ответственности между файлами
- PSR-12. Extended Coding Style — расширенный стандарт стиля кодирования, заменяет и дополняет устаревший PSR-2. Этот стандарт требует выполнения правил PSR-1. Также он добавляет множество новых требований: к отступам, файлам, строкам, ключевым словам, классам, управляющим конструкциям, области видимости и другим элементам
Эти стандарты знают и используют все PHP-разработчики. Новичкам полезно время от времени заглядывать в них и вырабатывать правильные привычки с самого начала. Однако запоминать все сразу нет необходимости.
Линтеры: автоматическая проверка кода
Запоминать все правила вручную не нужно. Существуют специальные программы, которые делают это за вас. Они называются линтеры.
Линтер представляет собой инструмент, который анализирует ваш код и сообщает о нарушениях стандартов. Он помогает:
- Избавиться от лишних пробелов
- Соблюдать отступы
- Писать читаемые и красивые выражения
В мире PHP широко используются два инструмента: PHP_CodeSniffer, который проверяет код на соответствие стандартам, и PHP CS Fixer, который умеет не только находить нарушения, но и исправлять их автоматически. В этом курсе используется PHP CS Fixer.
Рассмотрим пример:
<?php
print_r(1+ 3);Такой код выглядит неаккуратно, и линтер справедливо укажет на ошибку. Вот как выглядит процесс проверки:
Код Линтер Результат
┌────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ print_r( │ → │ PHP CS Fixer │ → │ binary_operator_ │
│ 1+ 3) │ │ │ │ spaces │
└────────────┘ └──────────────┘ └──────────────────────┘Это значит, что перед и после + не хватает пробелов. Согласно стандарту, должно быть так:
<?php
print_r(1 + 3);Правила и их смысл
Каждое сообщение линтера связано с конкретным правилом. Допустим, у нас есть файл с таким 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
print_r(((8 / 2) + 5) - (-3 / 2)); // => 10.5Этот вариант уже не нарушает правил, и линтер будет «молчать». Когда вы только начинаете, такие мелочи могут казаться неважными. Но со временем становится понятно, что именно они формируют единый читаемый стиль.
Использование линтера в своих проектах
Когда вы начнете писать собственные проекты за пределами учебной платформы, линтер будет незаменимым помощником. Его можно настроить в любом редакторе кода, запустить в терминале или подключить к сборке проекта. Линтер показывает ошибки, а PHP CS Fixer умеет и исправлять их автоматически.
Задание
Вы получили код от коллеги — он работает правильно, но нарушает стандарт оформления PSR-12. Исправьте пробелы вокруг операторов, не меняя логику:
<?php
print_r( (5 **2)-(3* 7));Результат должен остаться 4.
Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Arithmetics\Linting;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = '4';
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
