אכיפה של סטנדרטים של כתיבה ב-PHP

Coding Standards זו לא מילה גסה גם ב-PHP. למה זה חשוב? איך בודקים ומתקנים אוטומטית?
דוגמת שימוש בכלי PHPCS

Coding Standards הוא סט של כללים וחוקים בנוגע לכתיבה נכונה של קוד. מה זאת אומרת כתיבה נכונה? כתיבה נכונה לא נוגעת להצלחה או כשלון של הקוד אלא לדרך הכתיבה שלו. למשל, הקוד הזה:

if($var == 'true') {
    doSomething();
}

יעבוד באותו אופן כמו הקוד הזה:

if( true === $var ) {
    doSomething();
}

אבל הקוד הראשון לא כתוב לפי הסטנדרטים של וורדפרס ולפיכך אם אנסה לדחוף אותו לתוך הליבה של וורדפרס, סביר להניח שלא יאשרו לי אותו.

Coding Convention הוא דבר שנראה למתכנתים צעירים, או מתכנתים שלא רגילים לתמוך במוצר לאורך זמן כמו משהו מיותר, שלא לומר טרחני. אבל אני מאוד מאמין ב-Coding Convention ואני אוכף אותו בחומרה בכל פרויקט MEAN שאני מעורב בו. השימוש בסטנדרטים גורם בטווח הארוך ליצירת קוד נקי וקריא שקל לעבוד איתו, קוד שקל לתחזק ולקרוא אותו ובטווח היותר ארוך גורם לנו לכתוב קוד טוב יותר. אם יש כמה אנשים בצוות, אז בכלל השימוש והאכיפה של סטנדרטים מחמירים גורמת לקצת פחות בלגן. במיוחד אם הצוות נמצא במקומות גיאוגרפיים שונים.

אבל האמת היא שבפרויקטים של PHP אני מתייחס ל-coding convention באופן יותר ליברלי וחבל. אין שום סיבה שלא לאכוף את ה-coding convention של PHP על הפרויקטים שאני כותב ואם אני כותב תוספים לוורדפרס (למשל), אין שום סיבה שלא להשתמש ב WordPress Coding Convention.

אז איך עושים את זה? הדרך הפשוטה היא פשוט לקרוא את המדריך ואז לעבור על הקוד שלך. זו דרך כמובן שמתאימה לימי הביניים. אנחנו קצת יותר מתוחכמים. הדרך הנכונה היא להשתמש בכלים שמבצעים אנליזה סטטית של הקוד שזה השם הרשמי של התהליך של בדיקת הקוד לפי הסטנדרטים שאנחנו רוצים שהוא יהיה. השם הלא רשמי הוא lint שהוא (נשבע לכם) הוצאת מוך מהפופיק.

בדיקת קוד PHP נעשית באמצעות PHP CodeSniffer. ההתקנה נעשית באמצעות PEAR באופן הבא:

pear install PHP_CodeSniffer

אם אין לכם PEAR, שווה להתקין אותו. הוא עובד גם בחלונות המשוקצת עד כמה שאני זוכר. בלינוקס ההתקנה היא פשוטה מאוד. פשוט הקליקו את השורה שלעיל וזהו. אחרי ההתקנה (בין אם בחלונות ובין אם בלינוקס), הבדיקה היא פשוטה:

$ phpcs -i
The installed coding standards are PHPCS, Squiz, PSR2, MySource, PEAR, Zend and PSR1

אם אחרי שאתם מקלידים phpcs -i אתם מקבלים את השורה השניה, ההתקנה הצליחה. מה שבעצם השורה אומרת לנו היא רשימת קונבנציות הקוד שאנו יכולים לבדוק לפיהן. כאשר יש כמה קונבנציות קוד של ספריות שונות. אם אני רוצה לבדוק לפי הקונבנציה של ZEND, אז אני אריץ משהו כזה בספרית הפרויקט שלי:

phpcs --standard=Zend ./**/*.php

זה אומר לבצע בדיקות על כל קבצי ה-PHP בתיקית הפרויקט לפי הסטנדרטים של זנד. אם הכל תקין, מייד אקבל את כל השגיאות לפי כל הקבצים – למשל:

FILE: /var/www/html/github/wp-notice/tests/bootstrap.php
----------------------------------------------------------------------
FOUND 6 ERRORS AFFECTING 5 LINES
----------------------------------------------------------------------
  2 | ERROR | [ ] Missing file doc comment
  4 | ERROR | [x] First condition of a multi-line IF statement must
    |       |     directly follow the opening parenthesis
 19 | ERROR | [ ] Missing function doc comment
 19 | ERROR | [ ] Function name "_manually_load_plugin" is invalid;
    |       |     only private methods should be prefixed with an
    |       |     underscore
 21 | ERROR | [x] File is being conditionally included; use "include"
    |       |     instead
 22 | ERROR | [x] File is being conditionally included; use "include"
    |       |     instead
----------------------------------------------------------------------
PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

אפשר לראות שיש הסבר על כל "שגיאה". ניתן לתקן את השגיאות ידנית (יש גם אינטגרציה טובה ל-IDE שונים) ואפשר גם לתקן חלק מהתקלות באופן אוטומטי על ידי הרצה של phpcbf באופן הבא:

phpcbf --standard=Zend ./**/*.php

ואם אני רוצה לבדוק לפי סטנדרטים של וורדפרס? אין קל מזה! פשוט צריך להתקין תוסף ל-phpcs עבור הסטנדרטים של וורדפרס. ההתקנה היא פשוטה ביותר!

נכנסים לספריה כלשהי (לא temp) ועושים clone לפרויקט wpcs:

git clone -b master https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards.git wpcs

אומרים ל-phpcs שהתוסף הזה קיים ככה:

phpcs --config-set installed_paths /path/to/wpcs

כמובן שצריך לשים את הנתיב שבו התקנתם את ה-wpcs. יש מצב שתצטרכו להשתמש ב-sudo.
אם הכל תקין, כשתכתבו phpcs -i תקבלו את הטקסט הבא:

$ phpcs -i
The installed coding standards are PHPCS, Squiz, PSR2, MySource, PEAR, Zend, PSR1, WordPress, WordPress-VIP, WordPress-Core, WordPress-Docs and WordPress-Extra

עכשיו תוכלו להשתמש בסטנדרטים של WordPress:

phpcs --standard=WordPress ./**/*.php

ו.. זהו! הבדיקות יהיו לפי הסטנדרטים של וורדפרס. עכשיו רק נותר לתקן…

איך אני עושה שהבדיקות ירוצו אוטומטית? איך אני בודק קבצים שהם לא PHP? על זה אכתוב במאמרים הבאים.

פוסטים נוספים שכדאי לקרוא

רספברי פיי

התקנת OpenCanary על רספברי פיי

מה זה OpenCanary ואיך אפשר להתקין אותה על רספברי פיי ולשדרג את אבטחת הרשת הביתית או המשרדית.

פתרונות ומאמרים על פיתוח אינטרנט

נגישות טכנית – פודקאסט ומבוא

פרק בפודקאסטעל נגישות בעברית שצולל לכלים האוטומטיים ולפן המאד מאד טכני של הנגישות.

גלילה לראש העמוד