Chinese (Simplified) (中文(简体)) translation by Wei Zhang (you can also view the original English article)
在本系列的第一篇文章中,我们定义了代码气味,并查看了它们的一些示例以及我们如何重构它们以便提高代码质量。 召回:
[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主页或下面提供的一个实用程序中使用操作系统的一个安装程序。
- 适用于Windows的WAMP
- XAMPP适用于Linux,Windows或OS X.
- 适用于Windows和OS X的MAMP
所有这些软件包都有自己的安装程序,并将安装PHP,MySQL和Apache。 如前所述,我们主要关注的是在我们的系统上提供PHP副本。
安装完成后,尝试运行本节第一部分(或系统的等效命令)中提到的命令,您应该看到类似的输出。
如果不这样做,那么您可能需要将PHP路径添加到环境变量中。 这超出了本教程的范围,因此请参阅所安装项目版本的文档。
现在安装了PHP,我们已经准备好开始捕获并清理代码味道了。
什么是PHP CodeSniffer?
您可以在GitHub上找到官方的PHP CodeSniffer软件。

从项目的文档:
PHP_CodeSniffer是一组两个PHP脚本; 主要的phpcs
脚本,用于标识PHP,JavaScript和CSS文件以检测违反已定义的编码标准的行为,以及第二个用于自动纠正编码标准违规的phpcbf
脚本。 PHP_CodeSniffer是一个必不可少的开发工具,可确保您的代码保持干净和一致。
如果你之前从未见过这样的东西,那听起来真的很整洁,不是吗? 我的意思是,它是一个工具,旨在帮助确保代码中存在一定的质量水平!
虽然该项目提到了CSS和JavaScript等语言,但我们在本系列中专注于PHP。 但这并不意味着检查项目中这些特定语言文件的质量并不重要。
虽然听起来很棒,但它仍然提出了一个问题:我们如何安装软件,以及我们如何开始检查我们的代码?
我们现在回答这两个问题。
1.安装软件
如果您要执行Google搜索以了解如何安装PHP CodeSniffer,您可能会得到各种结果,其中许多结果将包括使用名为Pear的内容。
Pear曾经是PHP库的事实上的包分发系统,尽管许多软件包仍然可以通过该软件获得,但它也从其他流行的软件包(例如PHPUnit)中退出。
出于这个原因,我经常建议在可用时使用其他安装方法。 这包括使用Composer等工具,它可以说是最受欢迎的PHP依赖管理软件。

如果您以前从未使用过Composer,请不要担心。 我将提供您所需的所有步骤,以便使用Composer在您的计算机上启动并运行PHP CodeSniffer,并且只需最少的工作。 如果您有兴趣了解更多信息,我们有很多关于如何使用Composer的教程,请随时查看它们。
安装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代码。
2.评估脚本
首先,我们来看一个示例脚本。 我们将要查看的那个可以在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的背景下。
请不要犹豫,在下面的Feed中留下任何问题或评论,我的目标是回复每个问题。
参考
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.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post