在本系列的第一篇文章中,我们定义了代码异味,并查看了一些示例,了解它们是什么以及我们如何重构它们以提高代码质量。回忆一下:
[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中文网其他相关文章!