卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章79879本站已运行4417

PHP 升级:使用 PHPStan 阻止回归

PHP 升级:使用 PHPStan 阻止回归
照片由 ron mcclenny 在 unsplash 上拍摄

通常,当人们想到 phpstan 时,他们通常会想到改进类型覆盖率。这实际上只是 phpstan 能力的一小部分。在本文中,我们将学习如何使用它来停止升级回归。

什么是升级回归?

升级回归是指您希望删除应用程序中的某些功能。这可能是您的应用程序中的代码或您已安装的依赖项中的代码。

在尝试执行升级时,我们通常无法一次性完成所有操作。相反,我们必须进行一些小的增量改变。同样,当我们这样做时,我们也不希望其他开发人员继续使用已弃用的方法和属性。在这种情况下,那些新方法调用等是您升级应用程序进度的倒退。

安装 phpstan 和弃用规则扩展

要开始解决升级回归问题,第一步是安装 phpstan(如果尚未安装)。您可以通过 composer 安装它:

composer require --dev phpstan/phpstan

接下来,您需要添加弃用规则扩展,该扩展专门帮助跟踪代码库中已弃用的方法、属性和类的使用情况:

composer require --dev phpstan/phpstan-deprecation-rules

安装后,您可以将 phpstan 配置为使用弃用规则,方法是将其添加到 phpstan.neon 配置文件中:

includes:
    - vendor/phpstan/phpstan-deprecation-rules/rules.neon

使用此设置运行 phpstan 现在将标记代码库中任何已弃用的方法、属性或类。这是防止升级回归的重要步骤,因为在使用已弃用的代码时您会收到通知。然后,您可以重构这些实例,以确保您的应用程序转向更新的、受支持的功能。

使用“不允许的呼叫”扩展功能更进一步

虽然弃用规则扩展可捕获已弃用的代码,但 disallowed calls 扩展提供了一种方法来阻止特定函数调用、方法调用,甚至您不再希望在代码库中允许的整个类。这对于对代码进行更细粒度的控制特别有用,例如没有弃用警告的代码。

composer require --dev spaze/phpstan-disallowed-calls

安装后,您需要在 phpstan.neon 文件中对其进行配置。以下是如何禁止某些方法调用或函数的示例:

includes:
    - vendor/phpstan/phpstan-deprecation-rules/rules.neon
    # add the extension
    - vendor/spaze/phpstan-disallowed-calls/extension.neon

parameters:
    # You can see more example at https://github.com/spaze/phpstan-disallowed-calls/blob/main/docs/custom-rules.md
    disallowedMethodCalls:
        -
            method: 'PotentiallyDangerousLogger::log()' # `function` is an alias of `method`
            message: 'use our own logger instead'
            errorTip: 'see https://our-docs.example/logging on how logging should be used'Begin writing your own rules
    disallowedFunctionCalls:
        -
            function: 'var_dump()' # `method` is an alias of `function`
            message: 'use logger instead'

这个扩展非常全面,这意味着您将能够涵盖大多数场景。当然,可能在某些情况下不起作用,为此最好的办法就是开始学习编写自己的规则。

立即学习“PHP免费学习笔记(深入)”;

这是我们将在另一篇文章中讨论的内容。

结论

使用 phpstan 捕获升级回归是一种使升级过程变得更容易的明智方法,尤其是在大型开发团队中。将 phpstan 应用于您的持续集成设置

卓越飞翔博客
上一篇: Go 命令行工具:管道数据
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏