在本系列的第一篇文章中,我们定义了代码气味,并查看了它们的种类以及如何重构它们的几个示例,从而提高了代码的质量。 召回:
[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.安装软件
如果要对如何安装PHP CodeSniffer进行Google搜索,最终可能会得到各种各样的结果,其中许多结果将包括使用称为Pear的东西。
Pear曾经是PHP库的事实上的软件包分发系统,尽管该软件仍然可以使用许多软件包,但它也已从其他流行的软件包( 如PHPUnit ) 中淘汰了 。
因此,我通常建议使用其他可用的安装方法。 这包括使用诸如Composer之类的工具,该工具可以说是最受欢迎的PHP依赖管理软件。
如果您以前从未使用过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,并且熟悉其工作方式,因为我们将所有这些都结合在一起。
最后,您可以在个人资料页面上查看我的所有课程和教程,还可以在@tommcfarlin的 博客和/或Twitter上关注我,在其中我讨论了各种软件开发实践,尤其是在WordPress方面。
请不要在下面的提要中留下任何问题或评论,我将尽力回答每个问题或评论。