在本系列的第一篇文章中,我們定義了程式碼異味,並查看了一些範例,了解它們是什麼以及我們如何重建它們以提高程式碼品質。回憶一下:
[A] 程式碼氣味,在電腦程式碼中也稱為難聞的氣味,是指程式原始碼中可能表明更深層問題的任何症狀。
最終,我們正在努力實作 WordPress 特定的程式碼嗅探規則,但在此之前,熟悉 PHP CodeSniffer 非常重要。
在本文中,我們將了解 PHP CodeSniffer 是什麼、如何安裝它、如何針對範例腳本運行它以及如何重構所述腳本。然後我們將看看如何繼續討論 WordPress 特定的程式碼。
如果您設定了本機開發環境,那就太好了;如果沒有,那也沒關係。我將提供一些鏈接,幫助您快速啟動並運行。
話雖如此,讓我們開始吧。
開始之前,擁有某種類型的本機開發環境非常重要,即使這只包括 PHP 解譯器的副本。
請注意,如果您執行的是 Linux 或 OS X 的變體,則您可能已經安裝了 PHP。如果您這樣做,那麼您無需擔心本節中的其他任何內容。若要確定是否安裝了 PHP,請在命令列中執行以下命令:
$ php -v
您應該會看到類似以下內容(儘管您的輸出可能會根據您選擇運行的 PHP 版本而有所不同):
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
如果您更高級並且安裝了該專案的多個副本,那麼您可以運行:
$ which php
您應該會看到類似這樣的內容:
/Applications/MAMP/bin/php/php5.6.10/bin/php
儘管您的輸出會根據 PHP 副本的安裝位置而有所不同。
儘管本系列主要針對初學者,但可能有些人願意下載 PHP 副本並將其安裝在您的系統上。如果您是這樣,請從專案主頁取得 PHP 的副本,安裝它,然後返回本教學。
另一方面,如果這對您來說是新的,那麼您可以選擇使用上面連結的 PHP 主頁上適合您的作業系統的安裝程式之一或下面提供的實用程式之一。
所有這些軟體包都有自己的安裝程序,並將安裝 PHP、MySQL 和 Apache。如前所述,我們主要關心的是我們的系統上是否有可用的 PHP 副本。
安裝完畢後,請嘗試執行本節第一部分中提到的命令(或您系統的等效命令),您應該會看到類似的輸出。
如果不這樣做,那麼您可能需要將 PHP 的路徑加入環境變數。這超出了本教學的範圍,因此請查閱您安裝的專案版本的文件。
現在安裝了 PHP,我們就可以開始捕捉和清理程式碼異味了。
您可以在 GitHub 上找到官方 PHP CodeSniffer 軟體。
來自專案文件:
PHP_CodeSniffer 是一組兩個PHP 腳本;主要phpcs
腳本對PHP、JavaScript 和CSS 檔案進行標記,以偵測是否違反已定義的編碼標準,第二個phpcbf
腳本用於自動修正編碼標準違規行為。 PHP_CodeSniffer 是重要的開發工具,可確保您的程式碼保持乾淨且一致。
如果您以前從未見過這樣的東西,聽起來真的很不錯,不是嗎?我的意思是,它是一個旨在幫助確保您的程式碼具有一定品質水平的工具!
雖然專案提到了 CSS 和 JavaScript 等語言,但我們在本系列中將重點放在 PHP。但這並不意味著檢查專案中這些特定語言檔案的品質不重要。
儘管聽起來很棒,但它仍然引發了一些問題:我們如何安裝軟體,以及如何開始檢查我們的程式碼?
現在讓我們來回答這兩個問題。
如果您在 Google 上搜尋如何安裝 PHP CodeSniffer,您最終可能會得到各種結果,其中許多結果將包括使用名為 Pear 的東西。
Pear 曾經是 PHP 函式庫事實上的套件分發系統,儘管許多套件仍然可以透過該軟體取得,但它也從其他流行的套件(例如 PHPUnit)中退役。
出於這個原因,我經常建議使用其他可用的安裝方法。這包括使用 Composer 等工具,它可以說是最受歡迎的 PHP 依賴管理軟體。
#如果您以前从未使用过 Composer,请不要担心。我将提供您所需的所有步骤,以便通过 Composer 并以最少的工作在您的计算机上启动并运行 PHP CodeSniffer。如果您有兴趣了解更多信息,我们有很多有关如何使用 Composer 的教程,请随时查看。
在安装 PHP CodeSniffer 之前,我们需要实际安装 Composer。幸运的是,一旦您在本地计算机上启动并运行了 PHP,就可以很容易地做到这一点。
要安装 Composer,您可以下载此文件,然后从下载 Composer 安装程序的位置在命令行上执行以下命令:
$ php composer-setup.php --install-dir=bin --filename=composer
Composer 安装说明中的注释:
您可以使用--install-dir
选项将 Composer 安装到特定目录,并使用--filename
选项(重新)命名它。
有关更多信息,请随时参阅下载说明或在 GitHub 上查看整个项目。
安装完成后,您现在可以使用 Composer 将第三方依赖项(例如 PHP CodeSniffer)安装到您的项目中。不过,请记下您安装 Composer 副本的位置。运行它时您需要引用它,因为我们将从命令行运行它。
无论如何,让我们继续创建一个目录,我们将在其中运行 PHP 脚本。虽然此目录中还没有任何内容,但我们需要创建一个名为 composer.json
的文件。
我将调用我的目录 tutsplus-demo
,并将我的 Composer 文件包含在该目录中以开始使用。
创建文件后,将以下代码放入 JSON 文件中:
{ "require": { "squizlabs/php_codesniffer": "2.*" } }
简而言之,这告诉 Composer 在您执行正确的命令时安装 PHP CodeSniffer。请注意,require
指令执行以下操作:
列出该包所需的包。除非满足这些要求,否则不会安装该软件包。
您可以在文档中阅读有关 Composer 架构的更多信息。
一旦安装了 Composer,并且您的 composer.json
文件与上面的代码类似,就可以实际安装 PHP CodeSniffer 了。从命令行发出以下命令:
$ composer update
请注意,这是基于 Composer 在您的系统上公开可用的想法。如果没有,您可以通过键入已安装文件的完整路径来执行它,也可以将其添加到环境变量中,然后重新启动终端会话以重新加载变量。
Composer 完成工作后,您应该会看到如下内容:
您的 tutsplus-code
目录现在应如下所示:
特别注意,您有一个供应商目录。这意味着 Composer 正确安装了 PHP CodeSniffer。此时,我们已准备好评估 PHP 代码。
首先,我们来看一个示例脚本。我们要查看的内容可以在 Stack Overflow 上的这个答案中找到。
在 tutsplus-demo
目录中创建一个文件,并将其命名为 sample.php
。然后,确保该文件包含以下内容:
<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $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 - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } ?>
保存您的工作。接下来,我们可以从命令行运行 PHP CodeSniffer,并让它使用标准规则集评估上面脚本中的代码。
从您的终端输入以下命令:
$ vendor/bin/phpcs sample.php
这应该生成包含以下内容的输出:
Skyhopper5:tutsplus-demo tommcfarlin$ vendor/bin/phpcs sample.php FILE: /Users/tommcfarlin/Desktop/tutsplus-demo/sample.php ---------------------------------------------------------------------- FOUND 4 ERRORS AFFECTING 4 LINES ---------------------------------------------------------------------- 2 | ERROR | [ ] Missing file doc comment 5 | ERROR | [x] No space found after comma in function call 7 | ERROR | [ ] Expected "if (...) {\n"; found "if(...) {\n" 9 | ERROR | [ ] Expected "if (...) {\n"; found "if(...) {\n" ---------------------------------------------------------------------- PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY ---------------------------------------------------------------------- Time: 46ms; Memory: 3.5Mb Skyhopper5:tutsplus-demo tommcfarlin$
请注意,它发现了四个错误。第一列告诉您错误发生在哪一行,第二列指出这是一个错误(而不是警告),然后其余的告诉您它期望看到的内容与实际看到的内容。
所以让我们根据这些错误清理文件。一般来说,我们需要做到以下几点:
if
语句后添加空格。最终结果如下所示:
<?php /** * Determines if the file being uploaded is a legitimate image or not. * If so, allows the file to be uploaded. Otherwise, prevents the upload * from occurring. * * PHP Version 5 * * @category Demo * @package TutsPlus_Demo * @author Tom McFarlin <tom@tommcfarlin.com> * @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 . basename($_FILES["fileToUpload"]["name"]); $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 - " . $check["mime"] . "."; $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 環境中。
請隨時在下面的提要中留下任何問題或評論,我會盡力回覆每個問題或評論。
以上是使用PHP CodeSniffer與WordPress:安裝與使用PHP CodeSniffer的詳細內容。更多資訊請關注PHP中文網其他相關文章!