PHP 8 正式版发布,你的 WordPress 环境准备好上了吗?

PHP 8 正式版已经发布,它引入了一些重大变更,以及许多新特性和性能优化,包括命名参数、联合类型、注解、Constructor Property Promotion、match 表达式、nullsafe 运算符、JIT,以及对类型系统、错误处理和一致性的改进。

这里 想说以下,你的 WordPress 用 PHP 7.4 了吗?虽然目前还不推荐 WordPress 环境上 PHP 8,但是 PHP 7.4 确实不错,这里推荐下,目前对大多数主题插件也都已经兼容了。

图片[1]-PHP 8 正式版发布,你的 WordPress 环境准备好上了吗?-七玩网

PHP8 新特性 JIT

PHP 8 引入了两个 JIT 编译引擎。跟踪 JIT 是这两种方法中最有前途的一种,它在综合基准测试上的性能提高了大约 3 倍,在某些特定的长时间运行的应用程序上性能提高了 1.5 到 2 倍。典型的应用程序性能与 PHP 7.4 不相上下。

JIT 对 PHP8 性能的影响:

图片[2]-PHP 8 正式版发布,你的 WordPress 环境准备好上了吗?-七玩网

除此之外,还有一些类型系统和错误处理的改进、其他语法调整和改进以及新的类,接口和功能,详细的可以去 PHP 官网 查看

这里值得一提的是 Opaque objects,用来代替 Curl、Gd、Sockets、OpenSSL、XMLWriter 和 XML 扩展的资源类型。

//PHP7
var_dump(is_resource(curl_init())); // true

//PHP8
var_dump(is_resource(curl_init())); // false
var_dump(is_object(curl_init())); // true

WordPress 慎重选择 PHP 8

WordPress Core 旨在与 5.6 版本中的 PHP 8.0 兼容(当前计划于 2020 年 12 月 8 日发布)。

但是,PHP 8.0 是主要版本更新,其中进行了大量更改,从而破坏了向后兼容性,并且 PHP 7.x 功能版本中不推荐使用的许多功能已被正式删除。

以 DUX 主题为例,PHP 8.0 刚出来就做了测试,但 WordPress 核心的报错和提示就是一堆,只有等WordPress 5.6甚至更后面的版本彻底的支持 PHP 8 后,才能完美适配 PHP 8.0。

但是,这并不意味着在发布 WordPress 5.6 时可以安全地升级到 PHP 8。WordPress 很少单独运行,通常至少依赖一个主题和一组插件来支撑博客或网站。因此,他指出:“无法知道更广泛的生态系统(插件、主题等)对 PHP 8 的支持状态。因此,WordPress 5.6 应该被认为与 PHP 8 是“ beta 兼容”的。“

从本质上讲,这意味着,直到大多数主要主题和插件都与 PHP 8 兼容,WordPress 才被视为完全兼容。

所以说,选择一个好的主题和插件是有必要的,他们开发团队能够尽快更新兼容上去。

对开发人员影响

不断更新到最新版本的PHP并解决每个功能版本问题的站点通常在更新到新的主要版本时不太可能遇到问题。

PHP 8 中的新功能与 PHP 7 或 PHP 5 不兼容,通常会导致致命错误。

强烈建议使插件或主题与 PHP 8 兼容,但建议不要在分布式插件和主题中使用 PHP 8 中添加的功能,除非在主文件(插件)或文件(主题)的标题部分中将其 Requires PHP 设置为8.0style.css

命名参数和 WordPress

命名参数功能为所有以后的 PHP 代码引入了重要的向后兼容性考虑。引入此功能后,参数名称将成为API合同的一部分,并且在未来的 WordPress 版本中对其名称的任何更改都将破坏向后兼容性,从而在代码使用过时的参数名称调用函数时导致致命错误。

已建议对整个 WordPress Core 的功能签名进行积极审查,以确保所有参数名称都是描述性的,准确的,并且不使用保留关键字以避免任何潜在的混淆,但这不会成为 WordPress 5.6 的一部分。

在完成此审核之前,明确不支持在调用 WordPress 函数和类方法时使用命名参数,并且强烈建议不要使用命名参数,因为在审核期间,参数名称如有更改,恕不另行通知。审核完成后,它将在以后的开发人员说明中宣布。

如果在此之前选择使用 WordPress Core 函数和类时选择使用命名参数,则后果自负。

此外,PHP Core 一直在期待自己的参数名称,因为预期将发布 PHP 8。由于尚未更新 PHP 文档以反映 PHP 8 的更改,因此文档中当前详细说明的某些参数名称也可能会更改。

要关注或对此评论做出贡献,请参阅 Trac 上的#51553#50531

测试工具相关

因为WordPress支持PHP 5.6.20或更高版本,所以在PHP 8上运行WordPress Core PHPUnit测试套件并不容易。

  • PHPUnit> = 9.3 是当前唯一支持 PHP 8 的 PHP Unit 版本。
  • PHPunit 5.7.x 是最后一个支持 PHP 5.6 的版本。
  • PHPUnit 8.x 更改了一些不返回值的方法来指定 void 返回类型声明。但是,此返回类型在 PHP <7.1 中不可用。

为了保持在PHP 5.6上运行测试套件的能力,同时还允许测试在PHP 8上运行,需要对PHPUnit所做的更改已回移植到WordPress Core测试套件中,并且Composer用于操纵PHPUnit的自动加载过程7.x。

要在PHP 8上运行WordPress Core PHPUnit测试套件,需要使用Composer进行安装和运行。

为了简化操作,添加了一个新的NPM脚本,以使用Composer安装的PHPUnit版本在本地Docker环境中运行测试套件。

// Run within the local Docker container using version of
// PHPUnit installed within the container.
npm run test:php
 
// Run within the local Docker container using version of
// PHPUnit installed via Composer.
npm run test:php-composer

有关此新命令的更多信息,请参见#51456。有关使用PHP 8 / PHPUnit的> = 8测试套件兼容的更多信息,请参见#46149#50902#50913

© 版权声明
THE END
文章不错?点个赞呗
点赞0
评论 抢沙发

请登录后发表评论

    暂无评论内容