【问题标题】:Finding breaking changes when upgrading to PHP 8升级到 PHP 8 时发现重大更改
【发布时间】:2022-07-28 07:34:36
【问题描述】:

PHP 8.0 引入了许多可能破坏现有代码的更改。例如,count() 现在在给定 null 参数时会引发异常,而不是返回布尔值。 Backward Incompatible Changes 文档中未提及此更改。是否有工具或方法可以系统地分析现有 PHP 代码库,以标记升级到 PHP 8 引擎导致的潜在重大变化?

【问题讨论】:

  • php.watch/versions/8.0 很有用,并特别提到了这个变化 - php.watch/versions/8.0#error-handling。
  • 为了避免异常我使用 count($data ?? '');因此,如果失败,它将抑制为 null。比较 php8 与 php7。 php 8 在性能上获胜。
  • 该特定函数已针对 null 抛出警告 since 7.2,并且从未返回布尔值。但我同意我在文档中找不到提到警告被提升为 TypeError 的内容。有 an attempt at an RFC 以减少对以前使用 null 的函数的影响,但 count 不是目标。不幸的是,修复是静态分析和观察日志。

标签: php php-8


【解决方案1】:

Rector 可以帮助从早期版本升级代码(如果需要,还可以降级)。对于count()的问题,有IsCountableRector,它会在count()中使用有问题的变量之前添加一个is_countable($var)检查。

使用“一组”规则通常更容易,例如: $containerConfigurator->import(LevelSetList::UP_TO_PHP_80);

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多