() translation by (you can also view the original English article)
Wenn Sie gerade an der Serie teilnehmen, haben wir uns mit dem Thema Codegerüche befasst, wie Sie sie umgestalten können, und mit Tools, die uns dabei helfen, die Monotonie zu automatisieren, die damit verbunden ist, insbesondere in der PHP-Programmierung.
Wenn Sie die ersten beiden Artikel der Serie nicht gelesen haben, empfehle ich es, da sie einige Voraussetzungen für den Rest des Artikels enthalten.
Die Artikel sind:
- PHP CodeSniffer mit WordPress verwenden: Code-Gerüche verstehen
- PHP CodeSniffer mit WordPress verwenden: PHP CodeSniffer installieren und verwenden
Kurz gesagt, die obigen Artikel werden das Konzept der Codegerüche vorstellen, das wir wie folgt definiert haben:
[Ein] Codegeruch, im Computerprogrammiercode auch als schlechter Geruch bekannt, bezieht sich auf ein Symptom im Quellcode eines Programms, das möglicherweise auf ein tieferes Problem hinweist.
Ich werde Sie durch die Schritte führen, die für die Installation von PHP CodeSniffer auf Ihrem Computer erforderlich sind.
Aber wenn Sie es soweit geschafft haben, nehme ich an, Sie sind ein WordPress-Entwickler, und Sie möchten PHP CodeSniffer so konfigurieren, dass es Probleme in Ihrem Code erkennt, die sich auf die WordPress-Codierstandards beziehen.
Das ist gut! Im Rest dieses Artikels werden wir genau das behandeln.
Voraussetzungen
Dies sollte eine sehr kurze Liste sein. Wenn Sie die Serie bis zu diesem Punkt verfolgt haben, müssen Sie Folgendes haben:
- eine Version von PHP (vorzugsweise 5.6.10 oder höher)
- PHP CodeSniffer
- Komponist
All das wird in den vorherigen Artikeln der Serie ausführlich behandelt. Wenn Sie jedoch so weit gekommen sind und mit der Befehlszeile vertraut sind, sollte dies im Vergleich zu dem, was wir bisher gemacht haben, ein Kinderspiel sein.
Nachdem alles gesagt ist, lass uns anfangen.
Die WordPress-Regeln für PHP CodeSniffer
Suchen Sie zunächst die Regeln für WordPress-Codierungsstandards auf GitHub. Sie sind leicht zu finden.



Sie können alles über die Details des Projekts auf der Projektseite nachlesen. Das Wichtigste, das ich Ihnen mitteilen möchte, ist Folgendes:
Dieses Projekt ist eine Sammlung von PHP_CodeSniffer-Regeln (Schnüffeln), um für WordPress entwickelten Code zu überprüfen. Es gewährleistet die Codequalität und die Einhaltung der Codierungskonventionen, insbesondere der offiziellen WordPress-Codierungsstandards.
Ich möchte Ihre Aufmerksamkeit auf den Satz lenken, der auf die "offiziellen WordPress-Codierstandards" verweist. Beachten Sie, dass diese Regeln auf den WordPress-Codierungsstandards basieren. Sie können sie also nicht offiziell referenzieren.
Wenn Sie nach den Regeln suchen, die WordPress definiert, lesen Sie diesen Artikel im Codex. Es ist leicht zu folgen, leicht zu lesen, aber es ist viel zu merken. Zum Glück haben wir die oben verlinkte Regel.
Wichtig ist, dass der CodeSniffer die Probleme mit Ihrem Code findet und Sie darüber informiert, was Sie beheben müssen, auch wenn Sie mit den Regeln nicht vertraut sind. Obwohl Sie den Codex-Artikel nicht lesen müssen, kann er manchmal helfen, anhand der Fehler oder Warnungen, die der Sniffer generiert, herauszufinden, was erforderlich ist.
1. Installieren Sie die WordPress-Regeln
Vorausgesetzt, Sie haben PHP CodeSniffer ordnungsgemäß installiert, fügen wir der Software die WordPress-Regeln hinzu. Für dieses Tutorial mache ich alles über die Befehlszeile, um möglichst plattformunabhängig zu sein. Ich werde am Ende der Serie ein paar Worte zu IDEs und Regeln geben.
Öffnen Sie Ihr Terminal und navigieren Sie zu der Stelle, an der Sie PHP CodeSniffer installiert haben. Wenn Sie diese Serie von Tutorials mitverfolgt haben, erinnern Sie sich wahrscheinlich daran, dass wir eine composer.json
-Datei haben, die dies für uns in den Griff bekommt. Wenn nicht, denken Sie daran, composer.json
im Stammverzeichnis Ihres Projekts zu erstellen und fügen Sie der Datei Folgendes hinzu:
1 |
{
|
2 |
"require": { |
3 |
"squizlabs/php_codesniffer": "2.*" |
4 |
}
|
5 |
}
|
Wenn Sie fertig sind, führen Sie $ composer update
von Ihrem Terminal aus aus, und Sie haben alles, was Sie brauchen, um loszulegen. Führen Sie den folgenden Befehl aus, um die Installation zu überprüfen:
1 |
$ vendor/bin/phpcs --version |
Und Sie sollten ungefähr die folgende Ausgabe sehen:
1 |
PHP_CodeSniffer version 2.6.0 (stable) by Squiz (https://www.squiz.net) |
Perfekt. Als nächstes installieren wir die WordPress-Regeln. Da wir Composer verwenden (und dies auch weiterhin tun werden), ist dies sehr einfach.
Führen Sie den folgenden Befehl aus dem Stammverzeichnis Ihres Projekts aus:
1 |
composer create-project wp-coding-standards/wpcs:dev-master --no-dev
|
Beachten Sie, dass Sie möglicherweise mit der folgenden Frage aufgefordert werden:
1 |
Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? |
Wenn Sie wissen, was Sie tun, können Sie "n" auswählen. Andernfalls können Sie 'y' gut treffen.
2. Fügen Sie die Regeln zu PHP CodeSniffer hinzu
Nun, da PHP CodeSniffer installiert ist und die WordPress-Regeln installiert sind, müssen wir sicherstellen, dass PHP CodeSniffer unseren neuen Regelsatz kennt. Dazu müssen wir den folgenden Befehl in die Befehlszeile eingeben.
Geben Sie im Stammverzeichnis Ihres Projektverzeichnisses den folgenden Befehl ein:
1 |
$ vendor/bin/phpcs --config-set installed_paths wpcs |
Um zu überprüfen, ob die neuen Regeln hinzugefügt wurden, können wir PHP CodeSniffer bitten, uns die Regelsätze mitzuteilen, die derzeit verfügbar sind. Geben Sie im Terminal den folgenden Befehl ein:
1 |
$ vendor/bin/phpcs -i |
Und Sie sollten die folgende Ausgabe sehen (oder etwas sehr Ähnliches):
1 |
The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra and WordPress-VIP |
Beachten Sie in der obigen Zeile, dass wir einige Regeln bezüglich WordPress haben. Ziemlich ordentlich, nicht wahr? Mal sehen, wie sich das stapelt, wenn wir die Regelsätze gegen ein Plugin wie Hello Dolly ausführen.
3. Ausführen von PHP CodeSniffer gegen WordPress-Projekte
Angenommen, Sie arbeiten an einem Verzeichnis, das ein WordPress-Plugin enthält, können den folgenden Schritt überspringen. Wenn Sie andererseits keine Kopie eines WordPress-Skripts, einer Datei, eines Designs oder eines Plugins im Projektverzeichnis installiert haben, kopieren Sie sie jetzt in Ihr Projektverzeichnis.
Wie bereits erwähnt, werden wir das Hello Dolly-Plugin testen.



Um PHP CodeSniffer mit den WordPress-Regeln für die Dateien im Plugin-Verzeichnis auszuführen, geben Sie im Terminal den folgenden Befehl ein:
1 |
$ vendor/bin/phpcs --standard=WordPress hello-dolly |
Dies führt zu einer Ausgabe, die dem entsprechen sollte, was Sie hier sehen:
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 |
----------------------------------------------------------------------
|
Natürlich können sich einige dieser Dinge ändern, wenn Sie dieses Tutorial lesen.
Die Fehler sollten ziemlich klar sein, was behoben werden muss:
- Die erste Spalte gibt die Zeile an, in der das Problem besteht.
- Die zweite Spalte bestimmt, ob ein Fehler oder eine Warnung vorliegt.
- Die dritte Spalte erläutert das Problem und die Erwartungen an den Code.
Obwohl dies Fehler oder Warnungen sind, funktioniert der Code natürlich weiterhin. Aber lassen Sie uns das alles durchgehen und sehen, wie es ist, ein Plugin zu reparieren, das wohl das beliebteste ist, da es mit jeder WordPress-Installation kommt, und die Unterschiede in der Qualität des Codes überprüfen.
4. Refactoring Hallo Dolly
Beachten Sie, dass das Plugin den folgenden Quellcode enthält, bevor wir mit der Arbeit beginnen:
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 |
?>
|
Es sollte relativ einfach zu folgen sein, da es nur ein paar grundlegende PHP-Funktionen verwendet und Matt den Code gut kommentiert.
Aber angesichts der 14 Fehler, die der CodeSniffer gefunden hat, wollen wir das Plugin umgestalten. Unter Berücksichtigung der Fehler und der erwarteten Fehler sollten wir uns an jeden wenden.
Sobald das Plugin fertig ist, sollte es folgendermaßen aussehen:
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 |
}
|
Beachten Sie, dass das Plugin weiterhin funktioniert und der Code etwas sauberer ist. Als letztes überprüfen wir, ob der PHP CodeSniffer-Test erfolgreich ist. Lassen Sie uns den Code, den wir oben verwendet haben, erneut ausführen, um das Plugin zunächst auszuwerten.
1 |
$ vendor/bin/phpcs --standard=WordPress hello-dolly |
Und die Ausgabe, die wir sehen:
1 |
Skyhopper5:tutsplus_demo tommcfarlin$
|
Genau: Es sollte keine Ausgabe geben. Stattdessen sollte es eine Rückkehr zur Standardbefehlsaufforderung sein.
Ausgezeichnet. Das Plugin wurde auf den Standard gebracht. Aus diesem Grund ist ein Code-Sniffer so wertvoll: Er findet die Fehler in Ihrem Code anhand der von Ihnen definierten Regeln und meldet dann alle möglicherweise vorhandenen Fehler.
Dies stellt letztendlich sicher, dass Sie Code mit der höchsten Qualität in eine Produktionsumgebung einbinden. Das bedeutet nicht, dass Sie Unit-Tests oder andere Arten von Tests vermeiden sollten. Dies bedeutet auch, dass keine Fehler vorhanden sind. Es bedeutet nur, dass Ihr Code einem hohen Standard entspricht.
Fazit
Damit schließen wir die Reihe zur Verwendung von PHP CodeSniffer ab. Erinnern wir uns daran, dass wir uns in der gesamten Serie mit der Idee von Codegerüchen befasst haben, wie man sie umgestalten kann und welche Tools bei der Arbeit mit PHP-Anwendungen zur Verfügung stehen.
In diesem Artikel haben wir gesehen, wie wir einen Satz von Regeln für die WordPress-Codierungsstandards verwenden können, um unseren Code während der Arbeit an einem neuen oder vorhandenen Projekt zu bewerten. Beachten Sie, dass einige IDEs die Möglichkeit unterstützen, die Regeln beim Schreiben von Code auszuführen.
Obwohl dies den Rahmen dieses speziellen Tutorials sprengt, können Sie an verschiedenen Stellen im Web Ressourcen dafür finden. Suchen Sie einfach nach Ihrer IDE anhand des Namens, ermitteln Sie deren Unterstützung für PHP CodeSniffer, und installieren Sie anschließend die in diesem Tutorial beschriebenen WordPress-Regeln.
Wenn Ihnen dieser Artikel oder diese Serie gefallen hat, interessieren Sie sich vielleicht auch für andere Dinge, die ich auf meiner Profilseite oder in meinem Blog geschrieben habe. Sie können mir auch auf Twitter unter @tommcfarlin folgen, wo ich oft über Softwareentwicklungspraktiken im Rahmen von WordPress spreche und diese teile.
Zögern Sie nicht, Fragen oder Kommentare im Feed unten zu hinterlassen, und ich werde versuchen, auf jeden einzelnen von ihnen zu antworten.