PHP 开发工具:提升开发体验
随着 Laravel、Symfony、CakePHP 等框架的出现,PHP 已经成为构建 web 应用的一种非常强大的语言。这些框架极大地改善了 PHP 生态系统中的开发人员体验。
但是,仍然有一些工具可以开发人员有更好的体验。代码格式化程序、代码分析器、代码嗅探器等可以极大地改进工作流程,并可以帮助你编写更好的代码。
在本文中,我将列出一些我认为可以让开发人员更好地使用 PHP 的工具。
PHPStan
PHPStan 是一个静态分析工具,它专注于在不实际运行的情况下查找代码中的错误。它甚至可以在为代码编写测试之前就捕获了整类错误。
PHPStan 可以捕获各种各样的错误,从识别死代码到查明你是否使用了不存在的变量。或者,如果使用的变量不是你期望的类型,或者检测是否使用未知的方法。还有其他一些功能…
它还可以发现仅通过查看代码就不容易发现的错误,或者你可能会无意中忽略它们,比如总是计算为 true
的 if 条件或从未使用过的变量。
这意味着你将能够以前所未有的信心交付你的代码。
PHPUnit
PHPStan 是一个可以帮你编写更好代码的工具,那么 PHPUnit 就是一个可以帮你测试代码的工具。
如今,大多数框架都与 PHPUnit 捆绑在一起。因此,你不需要单独安装它。但如果你不使用任何框架,可以使用 Composer 进行安装。
使用 PHPUnit,你将能够为代码编写非常详细的测试。你可以使用 PHPUnit 编写单元测试、集成测试、功能测试等。
编写单元测试是确保代码在一段时间内按预期工作的好方法。它还可以帮助你自信地重构代码。
所以,如果你没有为代码编写测试,应该马上开始做。
Pest
Pest 是一个基于 PHPUnit 的 PHP 测试框架。这是一个相对较新的框架,但它在 PHP 社区中获得了很大的吸引力。
从本质上讲,Pest 为编写测试提供了更可读、更流畅的语法,这增强了编写测试的整体体验,减少了样板代码。
例如,如果你想为一个两个数字相加的函数编写一个测试,你可以在 PHPUnit 中这样做。
public function test_adds_two_numbers()
{
$this->assertEquals(2, add(1, 1));
}
在 Pest 中,你可以编写这样的测试。
it('adds two numbers', function () {
expect(add(1, 1))->toBe(2);
});
如你所见,Pest 的语法比 PHPUnit 的语法更可读、更流畅。而且它也更具表现力。
它的语法来源于JavaScript 测试框架 Jest。因此,如果你来自 JavaScript 世界,你会对 Pest 感到宾至如归。
PHP-CS-Fixer
PHP-CS-Fixer 是一个工具,可以自动修复你的代码样式,使其遵循 PSR-1、PSR-2、PSR-12 等标准。它还可以修复代码,使其遵守你自己的自定义规则。
与一些 linter 相反,PHP-CS-Fixer 不仅分析代码语法,还重新格式化代码以遵循你配置的样式。
它可以修复很多东西,如缩进、行尾、空行、关键字周围的空格、运算符周围的空格以及类型转换后的空格等。
Composer Normalize
有时,当你 在团队中工作时,由于 composer.json
文件中的差异,你 可能会遇到 Composer 的问题。例如,一个开发人员可能使用制表符进行缩进,而另一个可能使用空格。或者其中一个可能对字符串使用了单引号,而另一个可能使用了双引号。
这可能会变得令人讨厌。因此,为了避免这种情况,你可以使用 Composer Normalize,这是一个 Composer 插件,它可以规范化你的 composer.json
文件,使其与团队的其他成员保持一致。
你可以使用 Composer 安装此插件。安装后,你可以运行以下命令来规范化 composer.json
文件。
composer normalize
或者你可以使用 --dry-run 选项去查看不实际做出改变的情况下会有什么不同。
composer normalize --dry-run
Rector
Rector 是一个可以自动将代码升级(或降级)到最新标准的工具。它还可以帮你重构代码,使其更具可读性和可维护性。
例如,如果你想将代码升级到 PHP8,可以通过运行以下命令来完成。
vendor/bin/rector process src --set php80
这将把代码升级到 PHP8。你也可以使用 Rector 将代码升级到框架的最新版本。
例如,如果想将代码升级到 Laravel 8,可以通过运行以下命令来完成。
vendor/bin/rector process src --set laravel80
这些在 Rector 中被称为 presets。你可以在此处查看更多相关信息。
Whisky
最后,如果你想让其基于 Git hook 自动运行,可以使用 Whisky,这是一个可以基于 Git hook 运行命令的工具。
它是一个与框架无关的 PHP 包,允许你以版本控制的方式管理 Git 挂钩。它允许你在 JSON 文件中定义 Git hook,然后在 Git 存储库的 .git/hooks
目录中自动为你创建挂钩。
该包可以使用 Composer 作为开发依赖项进行安装。
composer require --dev projektgopher/whisky
然后像这样安装。
./vendor/bin/whisky install
Here’s the whisky.json file that can be used to define Git hooks.
{
"disabled": [],
"hooks": {
"pre-commit": [
"./vendor/bin/pint --dirty"
],
"pre-push": [
"composer test"
]
}
}
在这里,我们定义了两个 Git hook。一个是 pre-commit,另一个是 pre-push。pre-commit 将在提交代码之前运行pint命令。pre-push 将在推送代码之前运行 composer test 命令。