В этом уроке мы узнаем, что такое стандарты по написанию кода. Они облегчают разработку и делают код более понятным. Мы подробнее разберем две основные рекомендации по PHP, которые содержат правила по написанию кода.
Код нужно оформлять так, чтобы он был понятным и простым в поддержке. Для этого существуют специальные наборы правил — стандарты. Они описывают различные аспекты написания кода.
В PHP самыми распространенными являются стандарты PSR — PHP Standards Recommendations или стандартные рекомендации PHP от PHP-FIG. Это набор правил, которые облегчают разработку и решают определенную проблему.
На текущий момент существует несколько утвержденных рекомендаций, каждая из них обозначена цифрой: PSR-1, PSR-2, PSR-3 и другие. Со всеми рекомендациями вы познакомитесь во время обучения и работы. В этом уроке разберем подробнее следующие:
В любом языке программирования существуют специальные инструменты — линтеры. Они проверяют код на соответствие стандартам. Повсеместно используемым линтером в PHP является PHP_CodeSniffer.
Допустим, у нас есть файл с таким 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
Этот вариант уже не нарушает правил, и линтер будет «молчать».
Выведите на экран результат следующего вычисления: «разница между пятью в квадрате и произведением трёх и семи». Напишите код так, чтобы каждый оператор отделялся от операндов пробелами.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1<?php // phpcs:ignore PSR1.Files.SideEffects
2
3namespace HexletBasics\Arithmetics\Linting;
4
5use PHPUnit\Framework\TestCase;
6
7\HexletBasics\Functions\runScript();
8
9class Test extends TestCase
10{
11 public function test()
12 {
13 $expected = '4';
14 $this->expectOutputString($expected);
15 require 'index.php';
16 }
17}
18
Решение учителя откроется через: