() translation by (you can also view the original English article)
Если вы только присоединяетесь к этой серии, мы обсуждаем тему кодовых душков, способы их рефакторинга и инструменты, которые помогут нам автоматизировать некоторые рутины, связанные с этим, особенно в программировании на PHP.
Если вы не прочитали первые две статьи из этой серии, я рекомендую это, поскольку они охватывают несколько предварительных условий, которые мы имеем на старте, прежде чем двигаться вперед с остальной частью статьи.
Эти статьи:
- Использование PHP CodeSniffer с WordPress: понимание кодовых душков
- Использование PHP CodeSniffer с WordPress: установка и использование PHP CodeSniffer
Короче говоря, в приведенных выше статьях будет представлена концепция кодовых запахов, которую мы определяем следующим образом:
[A] запах кода, также известный как плохой запах, в коде компьютерного программирования, относится к любому признаку в исходном коде программы, который, возможно, указывает на более глубокую проблему.
И я проведу вас через шаги, необходимые для установки PHP_CodeSniffer на вашем компьютере.
Но если вы зашли так далеко, то я предполагаю, что вы разработчик WordPress, и вы заинтересованы в том, чтобы PHP CodeSniffer был настроен таким образом, чтобы он мог вынюхивать любые проблемы в вашем коде, связанные с стандартами кодирования WordPress.
Это хорошо! Потому что в оставшейся части этой статьи мы рассмотрим именно это.
Предпосылки
Это должен быть очень короткий список. Если вы следовали вместе с сериями до этого момента, вам необходимо иметь:
- Версия PHP (предпочтительно 5.6.10 или более поздняя)
- PHP CodeSniffer
- Composer
Все это подробно описано во всех предыдущих статьях серии, но если вы добрались до этого момента и владеете командной строкой, то это должно быть подгонкой по сравнению с тем, что мы сделали до сих пор.
Со всем сказанным, давайте начнем.
Правила WordPress для PHP CodeSniffer
Во-первых, найдите правила стандартов кодирования WordPress на GitHub. Их там легко найти.



Вы можете прочитать все подробности на странице проекта, но вот самое главное, чем я хотел бы поделиться:
Этот проект представляет собой набор правил PHP_CodeSniffer (sniff) для проверки кода, разработанного для WordPress. Он обеспечивает качество кода и соблюдение правил кодирования, особенно официальных стандартов кодирования WordPress.
Я хотел бы обратить ваше внимание на фразу, что это относится к «официальным стандартам кодирования WordPress». Обратите внимание, что эти правила основаны на стандартах кодирования WordPress. То есть, вы не можете официально ссылаться на них.
Если вы хотите найти способ просмотреть правила, которые определяет WordPress, ознакомьтесь с этой статьей в Codex. Им легко следовать, легко читать, но многое нужно запомнить. К счастью, у нас есть набор правил, указанный выше.
Важно отметить, что даже если вы не знакомы с правилами, CodeSniffer найдет проблемы в вашем коде и уведомит вас о том, что вам нужно исправить. Хотя вам и не нужно читать статью Codex, она иногда может помочь в определении того, что необходимо поправить на основе ошибок или предупреждений, генерируемых сниффером.
1. Установите правила WordPress.
Предполагая, что вы правильно установили PHP CodeSniffer, давайте добавим в программное обеспечение правила WordPress. В этом уроке я собираюсь делать все с помощью командной строки, чтобы быть максимально независимым от платформы. Я расскажу несколько слов об IDE и правилах в конце серии.
Откройте свой терминал и перейдите туда, где у вас установлена копия PHP CodeSniffer. Если вы следовали вместе с этой серией обучающих программ, то, скорее всего, вспомните, что у нас есть файл composer.json
, который установит все за нас. Если нет, не забудьте создать composer.json
в корневом каталоге вашего проекта и добавить в него:
1 |
{
|
2 |
"require": { |
3 |
"squizlabs/php_codesniffer": "2.*" |
4 |
}
|
5 |
}
|
После этого запустите $ composer update
из вашего терминала, и у вас будет все, что вам нужно чтобы начать. Чтобы проверить установку, выполните следующую команду:
1 |
$ vendor/bin/phpcs --version |
И вы должны получить что-то вроде следующего вывода:
1 |
PHP_CodeSniffer version 2.6.0 (stable) by Squiz (https://www.squiz.net) |
Отлично. Далее, давайте установим правила WordPress. Поскольку мы используем Composer (и будем продолжать это делать), это очень легко сделать.
Выполните следующую команду из корневого каталога вашего проекта:
1 |
composer create-project wp-coding-standards/wpcs:dev-master --no-dev
|
Обратите внимание, что может появиться запрос со следующим вопросом:
1 |
Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? |
Если вы знаете, что вы делаете, тогда не стесняйтесь идти дальше и выберите «n»; В противном случае, лучше нажимать 'y'.
2. Добавление правил в PHP CodeSniffer
Теперь, когда PHP CodeSniffer установлен и установлены правила WordPress, мы должны убедиться, что PHP CodeSniffer знает о нашем новом наборе правил. Для этого нам нужно ввести следующую команду в командной строке.
В корневом каталоге вашего проекта введите следующую команду:
1 |
$ vendor/bin/phpcs --config-set installed_paths wpcs |
Чтобы убедиться, что новые правила добавлены, мы можем попросить PHP CodeSniffer сообщить нам набор правил, которые он в настоящее время имеет. В терминале введите следующую команду:
1 |
$ vendor/bin/phpcs -i |
И вы должны увидеть следующий результат (или что-то очень похожее):
1 |
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra and WordPress-VIP |
Обратите внимание, что в строке выше мы имеем несколько наборов правил относительно WordPress. Очень красиво, не так ли? Конечно, давайте посмотрим, как это все сработает, когда мы запустим наборы правил чтобы проверить плагин, такой как например Hello Dolly.
3. Запуск PHP CodeSniffer для проверки проектов WordPress
Предполагая, что вы работаете в каталоге, который включает плагин WordPress, вы можете пропустить следующий шаг. Если, с другой стороны, у вас нет копии сценария WordPress, файла, темы или плагина, установленных в каталоге проекта, перейдите вперед и скопируйте его в свой каталог проекта.
Как уже упоминалось, мы будем тестировать плагин Hello Dolly.



Чтобы запустить PHP CodeSniffer с правилами WordPress в отношении файлов в каталоге плагина, введите в терминале следующую команду:
1 |
$ vendor/bin/phpcs --standard=WordPress hello-dolly |
Это приведет к выводу, который должен соответствовать тому, что вы видите здесь:
1 |
FILE: /Users/tommcfarlin/Desktop/tutsplus_demo/hello-dolly/hello.php |
2 |
----------------------------------------------------------------------
|
3 |
FOUND 14 ERRORS AFFECTING 14 LINES |
4 |
----------------------------------------------------------------------
|
5 |
2 | ERROR | Missing short description in doc comment
|
6 |
5 | ERROR | There must be exactly one blank line after the file |
7 |
| | comment |
8 |
6 | ERROR | Empty line required before block comment |
9 |
15 | ERROR | You must use "/**" style comments for a function |
10 |
| | comment |
11 |
46 | ERROR | Inline comments must end in full-stops, exclamation
|
12 |
| | marks, or question marks |
13 |
49 | ERROR | Inline comments must end in full-stops, exclamation
|
14 |
| | marks, or question marks |
15 |
53 | ERROR | Inline comments must end in full-stops, exclamation
|
16 |
| | marks, or question marks |
17 |
54 | ERROR | You must use "/**" style comments for a function |
18 |
| | comment |
19 |
56 | ERROR | Expected next thing to be an escaping function (see |
20 |
| | Codex for 'Data Validation'), not '"<p |
21 |
| | id='dolly'>$chosen</p>"' |
22 |
59 | ERROR | Inline comments must end in full-stops, exclamation
|
23 |
| | marks, or question marks |
24 |
62 | ERROR | Inline comments must end in full-stops, exclamation
|
25 |
| | marks, or question marks |
26 |
63 | ERROR | You must use "/**" style comments for a function |
27 |
| | comment |
28 |
64 | ERROR | Inline comments must end in full-stops, exclamation
|
29 |
| | marks, or question marks |
30 |
67 | ERROR | Expected next thing to be an escaping function (see |
31 |
| | Codex for 'Data Validation'), not '" |
32 |
| | '
|
33 |
----------------------------------------------------------------------
|
Конечно, некоторые из этих вещей могут измениться в зависимости от того, когда вы читаете этот урок.
Ошибки должны быть достаточно ясными относительно того, что необходимо исправить:
- Первый столбец обозначает строку, в которой обнаружена проблема.
- Второй столбец определяет, есть ли ошибка или предупреждение.
- В третьей колонке объясняется проблема и что ожидается от кода.
Обратите внимание, что хотя это ошибки или предупреждения, код, очевидно, будет работать. Но давайте посмотрим, как это исправить, плагин, возможно, самый популярный, поскольку он поставляется с каждой установкой WordPress, и рассмотрим различия в качестве кода.
4. Рефакторинг Hello Dolly
Обратите внимание, что плагин, прежде чем мы начнем работать над ним, включает в себя следующий исходный код:
1 |
<?php
|
2 |
/**
|
3 |
* @package Hello_Dolly
|
4 |
* @version 1.6
|
5 |
*/
|
6 |
/*
|
7 |
Plugin Name: Hello Dolly
|
8 |
Plugin URI: https://wordpress.org/plugins/hello-dolly/
|
9 |
Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page.
|
10 |
Author: Matt Mullenweg
|
11 |
Version: 1.6
|
12 |
Author URI: http://ma.tt/
|
13 |
*/
|
14 |
|
15 |
function hello_dolly_get_lyric() { |
16 |
/** These are the lyrics to Hello Dolly */
|
17 |
$lyrics = "Hello, Dolly |
18 |
Well, hello, Dolly
|
19 |
It's so nice to have you back where you belong
|
20 |
You're lookin' swell, Dolly
|
21 |
I can tell, Dolly
|
22 |
You're still glowin', you're still crowin'
|
23 |
You're still goin' strong
|
24 |
We feel the room swayin'
|
25 |
While the band's playin'
|
26 |
One of your old favourite songs from way back when
|
27 |
So, take her wrap, fellas
|
28 |
Find her an empty lap, fellas
|
29 |
Dolly'll never go away again
|
30 |
Hello, Dolly
|
31 |
Well, hello, Dolly
|
32 |
It's so nice to have you back where you belong
|
33 |
You're lookin' swell, Dolly
|
34 |
I can tell, Dolly
|
35 |
You're still glowin', you're still crowin'
|
36 |
You're still goin' strong
|
37 |
We feel the room swayin'
|
38 |
While the band's playin'
|
39 |
One of your old favourite songs from way back when
|
40 |
Golly, gee, fellas
|
41 |
Find her a vacant knee, fellas
|
42 |
Dolly'll never go away
|
43 |
Dolly'll never go away
|
44 |
Dolly'll never go away again"; |
45 |
|
46 |
// Here we split it into lines
|
47 |
$lyrics = explode( "\n", $lyrics ); |
48 |
|
49 |
// And then randomly choose a line
|
50 |
return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] ); |
51 |
}
|
52 |
|
53 |
// This just echoes the chosen line, we'll position it later
|
54 |
function hello_dolly() { |
55 |
$chosen = hello_dolly_get_lyric(); |
56 |
echo "<p id='dolly'>$chosen</p>"; |
57 |
}
|
58 |
|
59 |
// Now we set that function up to execute when the admin_notices action is called
|
60 |
add_action( 'admin_notices', 'hello_dolly' ); |
61 |
|
62 |
// We need some CSS to position the paragraph
|
63 |
function dolly_css() { |
64 |
// This makes sure that the positioning is also good for right-to-left languages
|
65 |
$x = is_rtl() ? 'left' : 'right'; |
66 |
|
67 |
echo " |
68 |
<style type='text/css'>
|
69 |
#dolly {
|
70 |
float: $x; |
71 |
padding-$x: 15px; |
72 |
padding-top: 5px;
|
73 |
margin: 0;
|
74 |
font-size: 11px;
|
75 |
}
|
76 |
</style>
|
77 |
"; |
78 |
}
|
79 |
|
80 |
add_action( 'admin_head', 'dolly_css' ); |
81 |
|
82 |
?>
|
Код довольно простой, поскольку он использует только несколько базовых функций PHP, и Мэтт проделал хорошую работу по комментированию кода.
Но, учитывая 14 ошибок, обнаруженных CodeSniffer, давайте реорганизуем плагин. Принимая во внимание ошибки, которые мы получили, и то, что от нас ожидают увидеть, давайте обратимся к каждой из них.
После этого плагин должен выглядеть следующим образом:
1 |
<?php
|
2 |
/**
|
3 |
* This is a plugin that symbolizes the hope and enthusiasm of an entire
|
4 |
* generation summed up in two words sung most famously by Louis Armstrong.
|
5 |
*
|
6 |
* @package Hello_Dolly
|
7 |
* @version 1.6
|
8 |
*
|
9 |
* @wordpress-plugin
|
10 |
* Plugin Name: Hello Dolly
|
11 |
* Plugin URI: https://wordpress.org/plugins/hello-dolly/
|
12 |
* Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page.
|
13 |
* Author: Matt Mullenweg
|
14 |
* Version: 1.6
|
15 |
* Author URI: http://ma.tt/
|
16 |
*/
|
17 |
|
18 |
/**
|
19 |
* Defines the lyrics for 'Hello Dolly'.
|
20 |
*
|
21 |
* @return string A random line of from the lyrics to the song.
|
22 |
*/
|
23 |
function hello_dolly_get_lyric() { |
24 |
/** These are the lyrics to Hello Dolly */
|
25 |
$lyrics = "Hello, Dolly |
26 |
Well, hello, Dolly
|
27 |
It's so nice to have you back where you belong
|
28 |
You're lookin' swell, Dolly
|
29 |
I can tell, Dolly
|
30 |
You're still glowin', you're still crowin'
|
31 |
You're still goin' strong
|
32 |
We feel the room swayin'
|
33 |
While the band's playin'
|
34 |
One of your old favourite songs from way back when
|
35 |
So, take her wrap, fellas
|
36 |
Find her an empty lap, fellas
|
37 |
Dolly'll never go away again
|
38 |
Hello, Dolly
|
39 |
Well, hello, Dolly
|
40 |
It's so nice to have you back where you belong
|
41 |
You're lookin' swell, Dolly
|
42 |
I can tell, Dolly
|
43 |
You're still glowin', you're still crowin'
|
44 |
You're still goin' strong
|
45 |
We feel the room swayin'
|
46 |
While the band's playin'
|
47 |
One of your old favourite songs from way back when
|
48 |
Golly, gee, fellas
|
49 |
Find her a vacant knee, fellas
|
50 |
Dolly'll never go away
|
51 |
Dolly'll never go away
|
52 |
Dolly'll never go away again"; |
53 |
|
54 |
// Here we split it into lines.
|
55 |
$lyrics = explode( "\n", $lyrics ); |
56 |
|
57 |
// And then randomly choose a line.
|
58 |
return wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] ); |
59 |
}
|
60 |
|
61 |
add_action( 'admin_notices', 'hello_dolly' ); |
62 |
/**
|
63 |
* This just echoes the chosen line, we'll position it later. This function is
|
64 |
* set up to execute when the admin_notices action is called.
|
65 |
*/
|
66 |
function hello_dolly() { |
67 |
|
68 |
$chosen = hello_dolly_get_lyric(); |
69 |
echo "<p id='dolly'>$chosen</p>"; // WPCS: XSS OK. |
70 |
|
71 |
}
|
72 |
|
73 |
add_action( 'admin_head', 'dolly_css' ); |
74 |
/**
|
75 |
* Add some CSS to position the paragraph.
|
76 |
*/
|
77 |
function dolly_css() { |
78 |
|
79 |
/**
|
80 |
*This makes sure that the positioning is also good for right-to-left languages.
|
81 |
*/
|
82 |
$x = is_rtl() ? 'left' : 'right'; |
83 |
echo "<style type='text/css'> #dolly { float: $x; padding-$x: 15px; padding-top: 5px; margin: 0; font-size: 11px; } </style> "; // WPCS: XSS OK. |
84 |
|
85 |
}
|
Обратите внимание, что плагин продолжает работать, и код стал немного чище. Наконец, давайте проверим, что плагин проходит тест PHP CodeSniffer. Давайте снова запустим код, который мы использовали выше, чтобы сначала оценить плагин.
1 |
$ vendor/bin/phpcs --standard=WordPress hello-dolly |
И вывод, который мы видим:
1 |
Skyhopper5:tutsplus_demo tommcfarlin$
|
Именно так: вывода не должно быть. Вместо этого должно быть возвращение к стандартной командной строке.
Отлично. Плагин был доведен до стандарта. Вот почему наличие анализатора кода настолько ценно: он находит ошибки в вашем коде на основе правил, которые вы определяете, а затем сообщает о любых возможных ошибках.
В конечном счете, это гарантирует, что вы выпускаете высококачественный письменный код на сайт производственного уровня. Теперь это не означает, что вам следует избегать модульного тестирования или других типов тестирования, и при этом это не означает, что ошибок не существует. Это просто значит, что ваш код соответствует высокому стандарту.
Вывод
И с этим мы завершаем серию использования PHP CodeSniffer. Напомним, что во всей серии мы рассмотрели идею запахов кода, способы их рефакторинга и инструменты, которые доступны нам при работе с PHP-приложениями.
В этой статье мы увидели, как мы можем использовать предоставленный набор правил для стандартов кодирования WordPress для оценки нашего кода при работе над новым или существующим проектом. Обратите внимание, что некоторые IDE поддерживают возможность выполнения правил при написании кода.
Хотя это выходит за рамки данного учебника, вы можете найти ресурсы для этого в разных местах в Интернете. Просто найдите свою IDE по имени, определите ее поддержку для PHP CodeSniffer, а затем обязательно установите правила WordPress, как мы подробно рассказали в этом учебнике.
Если вам понравилась эта статья или эта серия, вам может быть интересно проверить другие вещи, которые я написал как на странице моего профиля, так и в моем блоге. Вы также можете следить за мной в Twitter на @tommcfarlin, где я часто общаюсь и обмениваюсь различными методами разработки программного обеспечения в контексте WordPress.
С учетом сказанного, не стесняйтесь оставлять любые вопросы или комментарии в фиде ниже, и я постараюсь ответить на каждый из них.