Статьи

Использование PHP CodeSniffer с WordPress: Установка и использование PHP CodeSniffer

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

Запах кода [A], также известный как неприятный запах в коде компьютерного программирования, относится к любому признаку в исходном коде программы, который, возможно, указывает на более глубокую проблему.

В конечном счете, мы работаем над реализацией специфичных для WordPress правил анализа кода, но прежде чем мы это сделаем, важно ознакомиться с PHP CodeSniffer.

В этой статье мы рассмотрим, что такое PHP CodeSniffer, как его установить, как запустить его на примере сценария и как выполнить рефакторинг указанного сценария. Затем мы посмотрим, как мы собираемся двигаться дальше в WordPress-специфичный код.

Если у вас настроена локальная среда разработки, то отлично; если нет, это нормально. Я приведу несколько ссылок, которые помогут вам быстро приступить к работе.

С этим сказал, давайте начнем.

Прежде чем начать, важно иметь какую-то локальную среду разработки, даже если она включает в себя только копию интерпретатора PHP.

Обратите внимание, что если вы используете вариант Linux или OS X, есть вероятность, что у вас уже установлен PHP. Если да, то вам не нужно беспокоиться ни о чем другом в этом разделе. Чтобы определить, установлен ли у вас PHP, введите в командной строке следующую команду:

1
$ php -v

Вы должны увидеть что-то вроде следующего (хотя ваш вывод может отличаться в зависимости от версии PHP, которую вы решили запустить):

1
2
3
PHP 5.6.10 (cli) (built: Jul 6 2015 14:28:54)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

Если вы более продвинуты и у вас установлено несколько копий проекта, вы можете запустить:

1
$ which php

И вы должны увидеть что-то вроде этого:

1
/Applications/MAMP/bin/php/php5.6.10/bin/php

Хотя ваш вывод будет зависеть от того, где установлена ​​ваша копия PHP.

Хотя эта серия ориентирована в первую очередь на новичков, некоторые из вас могут спокойно загрузить копию PHP и установить ее в своей системе. Если это вы, то возьмите копию PHP с домашней страницы проекта, установите ее и вернитесь к этому руководству.

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

Все эти пакеты имеют свои собственные установщики и будут устанавливать PHP, MySQL и Apache. Как упоминалось ранее, мы прежде всего заинтересованы в том, чтобы в нашей системе была доступна копия PHP.

После того, как они установлены, попробуйте запустить команды, упомянутые в первой части этого раздела (или эквивалент вашей системы), и вы должны увидеть аналогичные результаты.

Если вы этого не сделаете, то вам, вероятно, потребуется добавить путь к PHP в переменные среды. Это выходит за рамки данного руководства, поэтому, пожалуйста, обратитесь к документации по версии установленного вами проекта.

Теперь, когда установлен PHP, мы готовы приступить к отлову и очистке наших запахов кода.

Вы можете найти официальное программное обеспечение PHP CodeSniffer на GitHub .

PHP CodeSniffer на GitHub

Из документации проекта:

PHP_CodeSniffer — это набор из двух PHP-скриптов; основной скрипт phpcs который токенизирует файлы PHP, JavaScript и CSS для обнаружения нарушений определенного стандарта кодирования, и второй скрипт phpcbf для автоматического исправления нарушений стандарта кодирования. PHP_CodeSniffer является важным инструментом разработки, который гарантирует, что ваш код остается чистым и согласованным.

Если вы никогда не видели ничего подобного раньше, это звучит действительно здорово, не так ли? Я имею в виду, это инструмент, который призван помочь обеспечить определенный уровень качества в вашем коде!

Хотя в проекте упоминаются такие языки, как CSS и JavaScript, в этой серии мы сосредоточимся на PHP. Это не значит, что не важно проверять качество этих языковых файлов в ваших проектах.

Как бы здорово это ни звучало, все равно возникают вопросы: как установить программное обеспечение и как мы начинаем проверять наш код?

Давайте ответим на оба этих вопроса сейчас.

Если вы выполните поиск в Google, чтобы установить PHP CodeSniffer, вы, скорее всего, получите множество результатов, многие из которых будут включать в себя то, что называется Pear .

Pear когда-то была де-факто системой распространения пакетов для библиотек PHP, и, хотя многие пакеты все еще доступны через программное обеспечение, она также удаляется из других популярных пакетов ( таких как PHPUnit ).

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

Домашняя страница композитора

Если вы никогда раньше не использовали Composer, не волнуйтесь. Я предоставлю все необходимые шаги для того, чтобы PHP CodeSniffer работал и работал на вашем компьютере с Composer и с минимальными затратами труда. Если вы хотите узнать больше, у нас есть несколько учебных пособий по использованию Composer, так что не стесняйтесь проверять их.

Перед установкой PHP CodeSniffer нам нужно установить Composer. К счастью, это очень легко сделать, если у вас есть PHP, работающий на вашей локальной машине.

Чтобы установить Composer, вы можете загрузить этот файл и затем выполнить следующую команду в командной строке, откуда бы вы ни скачали установщик Composer:

1
$ php composer-setup.php —install-dir=bin —filename=composer

Примечание из инструкции по установке Composer:

Вы можете установить Composer в определенный каталог с помощью параметра --install-dir и дополнительно (пере) --filename ему имя, а также с помощью параметра --filename .

Для получения дополнительной информации см. Инструкции по загрузке или просмотрите весь проект на GitHub .

После установки вы можете использовать Composer для установки сторонних зависимостей, таких как PHP CodeSniffer, в свои проекты. Обратите внимание на то, где вы установили свою копию Composer. Вам нужно будет ссылаться на него при запуске, так как мы собираемся запустить его из командной строки.

В любом случае, давайте продолжим и создадим каталог, из которого мы будем запускать наши PHP-скрипты. Хотя в этом каталоге пока ничего не будет, нам нужно создать файл с именем composer.json .

Я собираюсь позвонить в мой каталог tutsplus-demo и tutsplus-demo свой файл Composer в этот каталог, чтобы начать.

Начальный каталог проекта

Создав файл, поместите следующий код в файл JSON:

1
2
3
4
5
{
    «require»: {
        «squizlabs/php_codesniffer»: «2.*»
    }
}

Короче говоря, это говорит Composer об установке PHP CodeSniffer при выполнении правильной команды. Обратите внимание, что директива require делает следующее:

Перечисляет пакеты, требуемые этим пакетом. Пакет не будет установлен, если эти требования не будут выполнены.

Вы можете прочитать больше о схеме Composer в документации .

Как только Composer установлен и у вас есть файл composer.json похожий на приведенный выше код, самое время установить PHP CodeSniffer. Из командной строки введите следующую команду:

1
$ composer update

Обратите внимание, что это основано на идее, что Composer общедоступен в вашей системе. Если нет, вы можете выполнить его, введя полный путь к установленному файлу или добавить его в переменные среды, а затем перезапустить сеанс терминала, чтобы перезагрузить переменные.

Когда Composer закончит работу, вы должны увидеть что-то вроде этого:

PHP CodeSniffer успешно установлен через Composer

И ваш tutsplus-code теперь должен выглядеть так:

tutsplus-demo с новым каталогом вендоров, содержащим PHP CodeSniffer

Обратите особое внимание, что у вас есть каталог поставщиков. Это означает, что Composer правильно установил PHP CodeSniffer. На данный момент мы готовы оценить наш код PHP.

Сначала давайте рассмотрим пример сценария. Тот, на который мы будем смотреть, можно найти в этом ответе о переполнении стека .

Создайте файл в своем tutsplus-demo и назовите его sample.php . Затем убедитесь, что файл содержит следующее содержимое:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<?php
$target_dir = «uploads/»;
$target_file = $target_dir .
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST[«submit»])) {
    $check = getimagesize($_FILES[«fileToUpload»][«tmp_name»]);
    if($check !== false) {
        echo «File is an image — » .
        $uploadOk = 1;
    } else {
        echo «File is not an image.»;
        $uploadOk = 0;
    }
}
?>

Сохрани свою работу. Затем мы можем запустить PHP CodeSniffer из командной строки и заставить его оценить код в приведенном выше сценарии, используя стандартный набор правил.

С вашего терминала введите следующую команду:

1
$ vendor/bin/phpcs sample.php

Это должно генерировать вывод, который содержит следующее:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
Skyhopper5:tutsplus-demo tommcfarlin$ vendor/bin/phpcs sample.php
 
FILE: /Users/tommcfarlin/Desktop/tutsplus-demo/sample.php
———————————————————————-
FOUND 4 ERRORS AFFECTING 4 LINES
———————————————————————-
 2 |
 5 |
 7 |
 9 |
———————————————————————-
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
———————————————————————-
 
Time: 46ms;
 
Skyhopper5:tutsplus-demo tommcfarlin$

Обратите внимание, что он обнаружил четыре ошибки. В первом столбце указывается, в какой строке указана ошибка, во втором столбце указывается, что это ошибка (вместо предупреждения), а в остальных указывается, что он ожидал увидеть в сравнении с тем, что видел в действительности.

Итак, давайте очистим файл на основе этих ошибок. Вообще говоря, нам нужно сделать следующее:

  1. Добавьте комментарий к документации на уровне файлов.
  2. Добавьте пробел после запятой в вызове функции в файле строки.
  3. Добавьте пробелы после операторов if в скрипте.

Конечный результат будет выглядеть примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
/**
 * Determines if the file being uploaded is a legitimate image or not.
 * If so, allows the file to be uploaded.
 * from occurring.
 *
 * PHP Version 5
 *
 * @category Demo
 * @package TutsPlus_Demo
 * @author Tom McFarlin <[email protected]>
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 * @link http://is.gd/dq0DhO
 * @since 1.0.0
 */
 
$target_dir = «uploads/»;
$target_file = $target_dir .
$uploadOk = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if (isset($_POST[«submit»])) {
    $check = getimagesize($_FILES[«fileToUpload»][«tmp_name»]);
    if ($check !== false) {
        echo «File is an image — » .
        $uploadOk = 1;
    } else {
        echo «File is not an image.»;
        $uploadOk = 0;
    }
}
?>

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

Неплохо, правда?

Теперь представьте, что это может сделать для больших кодовых баз и сценариев, с которыми вы работаете ежедневно.

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

Потому что так будет не всегда.

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

И это именно то, что мы собираемся сделать с WordPress в следующей статье.

Что касается вводного материала, мы рассмотрели немало основ в этом уроке. То есть мы рассмотрели настройку базовой среды разработки на нашей локальной машине, которая включает PHP.

Далее мы взглянули на Composer и как его установить в нашей системе. Мы написали наш первый файл Composer для получения зависимостей, а именно PHP CodeSniffer, и мы даже оценили и исправили результаты, предоставленные нам программным обеспечением.

Если вы в первую очередь разработчик PHP, то я надеюсь, что первые две статьи этой серии были полезны, но если вы разработчик на WordPress, у нас есть кое-что, что можно затронуть.

В заключительной статье серии мы собираемся обратить внимание на WordPress. Поскольку у него есть собственный набор стандартов кодирования, мы рассмотрим, как загрузить эти правила в PHP CodeSniffer, а затем оценим плагины, код темы и т. Д., Чтобы получить представление о том, как использовать это в нашей повседневной жизни. сегодняшняя работа в наших проектах WordPress.

Прежде чем перейти к следующей статье, просмотрите приведенный выше код и убедитесь, что у вас установлены PHP и PHP CodeSniffer и что вы знакомы с тем, как он работает, поскольку мы собираемся связать все это вместе.

Наконец, вы можете просмотреть все мои курсы и учебные пособия на странице моего профиля , и вы можете следить за мной в моем блоге и / или Twitter по адресу @tommcfarlin, где я рассказываю о различных практиках разработки программного обеспечения, особенно в контексте WordPress.

Пожалуйста, не стесняйтесь оставлять любые вопросы или комментарии в ленте ниже, и я постараюсь ответить на каждый из них.