Advertisement
  1. Code
  2. PHP

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

Scroll to top
Read Time: 13 min

() translation by (you can also view the original English article)

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

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

Эти статьи:

  1. Использование PHP CodeSniffer с WordPress: понимание кодовых душков
  2. Использование PHP CodeSniffer с WordPress: установка и использование PHP CodeSniffer

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

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

И я проведу вас через шаги, необходимые для установки PHP_CodeSniffer на вашем компьютере.

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

Это хорошо! Потому что в оставшейся части этой статьи мы рассмотрим именно это.

Предпосылки

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

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

Со всем сказанным, давайте начнем.

Правила WordPress для PHP CodeSniffer

Во-первых, найдите правила стандартов кодирования WordPress на GitHub. Их там легко найти.

The WordPress Coding Standard RulesThe WordPress Coding Standard RulesThe WordPress Coding Standard Rules

Вы можете прочитать все подробности на странице проекта, но вот самое главное, чем я хотел бы поделиться:

Этот проект представляет собой набор правил 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.

Preparing to test Hello DollyPreparing to test Hello DollyPreparing to test 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.

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

Ресурсы

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.