编程

PHP 开发工具:提升开发体验

587 2024-03-31 20:45:00

随着 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 命令。

 

PHP