Post by account_disabled on Dec 12, 2023 6:04:34 GMT
转译代码时要避免的陷阱转译和持续集成 测试转译代码下载 PDF 格式的文章 关闭 在理想情况下,我们应该在所有网站上使用PHP 8.0(撰写本文时的最新版本),并在新版本发布后立即更新它。然而,开发人员经常需要使用旧版本的 PHP,例如在为WordPress创建公共插件或使用阻止您更新 Web 服务器环境的旧代码时。 在这些情况下,我们可能会放弃使用最新PHP代码的希望。但还有更好的选择:我们仍然可以使用 PHP 8.0 编写源代码并将其转换为旧版本的 PHP - 甚至 PHP 7.1。 在本指南中,我们将解释您需要了解的有关转译 PHP 代码的所有信息。 什么是转译? 转译将编程语言的源代码转换为相同或不同编程语言的等效源代码。 编译在 Web 开发中并不是一个新概念:客户端开发人员可能会熟悉Babel,这是一个 JavaScript 代码的转译器。 Babel 将 JavaScript 代码从现代 ECMAScript 2015+ 版本转换为与旧版浏览器兼容的旧版本。例如,给定一个 ES2015 箭头函数什么是 PHP 转译? Web 开发中的新功能可能是可以转译服务器端代码,尤其是 PHP。 PHP 转译的工作方式与 JavaScript 转译相同:现代版本 PHP的源代码被转换为旧版本 PHP 的等效代码。
与之前相同的示例是 PHP 7.4 中的箭头函数 在这些情况下,只要开发而不是 电话号码清单 生产需要新功能,仍然可以执行转译。然后,我们可以简单地从转译目标代码中完全删除该功能,而不会产生严重后果。 联合类型就是这样的一个例子。此功能允许您检查输入类型与其提供的值之间是否不匹配,这有助于防止错误。如果存在类型冲突,那么开发中就会出现错误,我们应该在代码投入生产之前修复它。 因此,我们可以从生产代码中删除该功能如果错误在生产中仍然发生,则抛出的错误消息将不如使用联合类型时准确。然而,这个可能的缺点可以通过首先使用联合类型来克服。 转译 PHP 代码的好处 转译允许您使用最新版本的 PHP 创建应用程序代码,并生成即使在运行旧版本 PHP 的环境中也能运行的版本。 这对于构建遗留内容管理系统 (CMS)产品的开发人员特别有用。例如,WordPress仍然正式支持PHP 5.6(尽管建议使用 PHP 7.4+)。运行 网站(这些版本均已终止使用 (EOL),这意味着它们不再收到安全更新)的比例的任何版本的 WordPress 网站的比例高 按版本划分的 WordPress 使用统计数据。 按版本划分的 WordPress 使用统计数据。
图片来源:WordPress 因此,针对全球受众的 WordPress 主题和插件很可能会使用旧版本的 PHP 进行编码,以扩大其覆盖范围。通过转译,这些可以使用 PHP 8.0 进行编码,并且仍然可以针对旧版本的 PHP 发布,从而覆盖尽可能多的用户。 事实上,任何需要支持除最新版本之外的任何 PHP 版本的应用程序(即使在当前支持的 PHP 版本范围内)都可以从中受益。 Drupal 就是这种情况,它需要。借助转译,开发人员可以使用创建公开可用的 Drupal 模块,并使用 PHP 7.3 发布它们。 另一个示例是为由于某种原因无法在其环境中运行 PHP 8.0 的客户创建自定义代码时。然而,借助转译,开发人员可以使用 PHP 8.0 开发他们的产品并在这些遗留环境中运行它们。 何时转换 PHP PHP 代码始终可以被转译,除非它包含某些 PHP 功能,而这些功能在以前的 PHP 版本中没有同等功能。 PHP 8.0 中引入的attribute可能就是这种情况:在前面使用箭头函数的示例中,转译是可能的,因为箭头函数是语法糖。另一方面,属性创造了全新的行为。这种行为也可以用 PHP 7.4 及更高版本重现,但只能通过手动编码,即不能基于工具或流程自动编码(人工智能可以提供解决方案,但我们还没有做到)。 用于开发的属性,例如#[Deprecated]可以以与删除联合类型相同的方式删除。但在生产中改变应用程序行为的属性无法删除,甚至无法直接转译。
与之前相同的示例是 PHP 7.4 中的箭头函数 在这些情况下,只要开发而不是 电话号码清单 生产需要新功能,仍然可以执行转译。然后,我们可以简单地从转译目标代码中完全删除该功能,而不会产生严重后果。 联合类型就是这样的一个例子。此功能允许您检查输入类型与其提供的值之间是否不匹配,这有助于防止错误。如果存在类型冲突,那么开发中就会出现错误,我们应该在代码投入生产之前修复它。 因此,我们可以从生产代码中删除该功能如果错误在生产中仍然发生,则抛出的错误消息将不如使用联合类型时准确。然而,这个可能的缺点可以通过首先使用联合类型来克服。 转译 PHP 代码的好处 转译允许您使用最新版本的 PHP 创建应用程序代码,并生成即使在运行旧版本 PHP 的环境中也能运行的版本。 这对于构建遗留内容管理系统 (CMS)产品的开发人员特别有用。例如,WordPress仍然正式支持PHP 5.6(尽管建议使用 PHP 7.4+)。运行 网站(这些版本均已终止使用 (EOL),这意味着它们不再收到安全更新)的比例的任何版本的 WordPress 网站的比例高 按版本划分的 WordPress 使用统计数据。 按版本划分的 WordPress 使用统计数据。
图片来源:WordPress 因此,针对全球受众的 WordPress 主题和插件很可能会使用旧版本的 PHP 进行编码,以扩大其覆盖范围。通过转译,这些可以使用 PHP 8.0 进行编码,并且仍然可以针对旧版本的 PHP 发布,从而覆盖尽可能多的用户。 事实上,任何需要支持除最新版本之外的任何 PHP 版本的应用程序(即使在当前支持的 PHP 版本范围内)都可以从中受益。 Drupal 就是这种情况,它需要。借助转译,开发人员可以使用创建公开可用的 Drupal 模块,并使用 PHP 7.3 发布它们。 另一个示例是为由于某种原因无法在其环境中运行 PHP 8.0 的客户创建自定义代码时。然而,借助转译,开发人员可以使用 PHP 8.0 开发他们的产品并在这些遗留环境中运行它们。 何时转换 PHP PHP 代码始终可以被转译,除非它包含某些 PHP 功能,而这些功能在以前的 PHP 版本中没有同等功能。 PHP 8.0 中引入的attribute可能就是这种情况:在前面使用箭头函数的示例中,转译是可能的,因为箭头函数是语法糖。另一方面,属性创造了全新的行为。这种行为也可以用 PHP 7.4 及更高版本重现,但只能通过手动编码,即不能基于工具或流程自动编码(人工智能可以提供解决方案,但我们还没有做到)。 用于开发的属性,例如#[Deprecated]可以以与删除联合类型相同的方式删除。但在生产中改变应用程序行为的属性无法删除,甚至无法直接转译。