如何测试WordPress产品的PHP兼容性

为什么了解PHP版本兼容性很重要,哪里能找到PHP版本更新的相关信息,以及如何用两种方法来测试你的插件和主题是否支持最新的PHP版本。

为什么要测试 PHP 版本兼容性?

如何测试WordPress产品的PHP兼容性


WordPress是用PHP语言编写的,这意味着它需要在网站主机支持的PHP版本上顺利运行。虽然WordPress会推荐一个最低的PHP版本要求,但是老版本的PHP会逐渐停止更新,甚至不再提供安全补丁。

比如说,现在WordPress推荐至少使用的PHP版本是7.4,但这个版本在2022年11月28日就已经停止更新了。

WordPress核心代码能够在PHP 8.0 和 PHP 8.1上运行,并且也支持PHP 8.2 和 PHP 8.3的版本。但是,并不是所有的插件都能保证在这些新版本的PHP上正常工作。

所以,如果你是一个插件开发者,定期检测你的插件与不同PHP版本的兼容性是非常重要的。

在哪里可以找到有关 PHP 版本更改的信息

为了了解 PHP 版本何时以及如何更改,最好访问 PHP 官方网站 https://www.php.net/。

“支持的版本”页面上,您可以找到有关当前支持哪些版本、支持级别以及哪些版本已停止使用的信息。

截至本记录时,所有 PHP 7.x 版本均已终止生命周期,PHP 8.0 仅支持安全修复,并且积极支持 PHP 8.1 以及 PHP 8.2 和 8.3,这意味着错误和安全缺陷将得到修复。请注意,PHP 8.0 仅在 2023 年 11 月之前支持安全修复,大约在 PHP 8.3 发布的时间,然后 PHP 8.0 将被视为生命周期结束。

在 PHP 文档的附录部分中,您可以找到有关从旧 PHP 版本迁移的指南,其中列出了旧版本和新版本之间最重要的更改。例如,从 PHP 7.4.x 迁移到 PHP 8.0.x指南列出了 PHP 7.4 和 PHP 8.0 之间最重要的变化。

如何测试WordPress产品的PHP兼容性

示例插件

<?php
/**
 * Plugin Name: WP Learn Compatibility
 * Description: Learn to test a plugin for PHP Version Compatibility
 * Version: 1.0.1
 *
 * @package wp-learn-compatibility
 */

/**
 * Posts fetcher class
 */
class Post_Fetcher {

    /**
     * Array posts
     *
     * @var array
     */
    protected $posts;

    /**
     * Fetch the WordPress posts
     */
    public function post_fetcher() {
        $this->posts = get_posts();
    }

    /**
     * Fetch the posts and return the formatted HTML
     *
     * @return string
     */
    public function fetch_posts() {
        $post_html = '<div class="post">';
        foreach ( $this->posts as $post ) {
            if ( property_exists( $post, 'post_title' ) ) {
                $post_html .= sprintf(
                    '<h4><a href="%s">%s</a></h4>',
                    get_permalink( $post->ID ),
                    $post->post_title
                );
            }
        }
        $post_html .= '</div>';
        return $post_html;
    }
}

add_shortcode( 'wp_learn_php_compatibility', 'wp_learn_php_compatibility_shortcode_render' );

/**
 * Shortcode callback function for wp_learn_php_compatibility shortcode
 *
 * @return string
 */
function wp_learn_php_compatibility_shortcode_render() {
    $post_fetcher = new post_fetcher();
    $post_html    = $post_fetcher->fetch_posts();
    return $post_html;
}

在这个教程中,我们将通过一个示例插件来学习。这个插件可以创建一个特殊的短代码,当你在页面上使用这个短代码时,它会显示一个帖子列表,包括每篇帖子的标题。一个名为post_fetcher的类负责获取这些帖子信息。

当你在使用PHP 7.4版本的服务器上测试这个短代码时,可以看到它能够正常工作,按照我们的预期显示帖子列表。

如何测试WordPress产品的PHP兼容性

如何测试 PHP 版本兼容性

要检查PHP版本兼容性,有好几种不同的测试方式,这可能会涉及到使用不同版本的PHP和一些特殊的工具。在这篇教程里,我们会介绍两种测试方法,并且探讨每种方法的优势和可能的不足。

手动兼容性测试

手动测试方法需要你在WordPress环境中设置你想要测试的PHP版本,然后在这个环境里测试你的插件。

你可以通过几种不同的方式来搭建这样的环境,最常见的方法是使用一个可以轻松切换PHP版本的本地开发工具,比如Mamp、Laragon、LocalWP或DevKinsta。

以本教程为例,我们将选择PHP 8.1版本进行测试。

要快速确认你的WordPress正在使用哪个版本的PHP,你可以在WordPress安装目录下创建一个名为info.php的文件,并填入一段特定的代码。

<?php
phpinfo();

然后,在浏览器中导航到 info.php 文件,您应该会看到显示的 PHP 版本。

设置好测试环境后,您需要启用 WordPress 调试。

为此,请编辑该wp-config.php文件,并更新定义常量的行WP_DEBUG,将其设置为true

define( 'WP_DEBUG', true );

另外,添加WP_DEBUG_DISPLAY常量并将其设置为 false,然后添加WP_DEBUG_LOG常量并将其设置为 true,以便将错误记录到目录debug.log中的文件中wp-content

define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );

您还可以WP_DEBUG_LOG通过指定文件路径将常量设置为自定义位置。例如:

define( 'WP_DEBUG_LOG', '/home/ubuntu/wp-local-env/sites/learnpress/logs/debug.' . date( 'Y-m-d' ) . '.log' );

然后,通过刷新页面来测试您的插件。请注意,短代码功能已损坏。

如果您查看 debug.log,您将看到显示以下错误:

[24-Nov-2023 12:59:49 UTC] PHP Warning:  foreach() argument must be of type array|object, null given in /home/ubuntu/wp-local-env/sites/learnpress/wp-content/plugins/wp-learn-php-compatibility/wp-learn-php-compatibility.php on line 36

现在,如果您转到插件文件的第 36 行,您将看到以下代码,您将看到它正在尝试循环遍历该$this->posts属性,该属性由于某种原因为 null。原因可能不是很明显,因此您可能需要深入研究从 PHP 7.4.x 迁移到 PHP 8.0.x指南。

在“向后不兼容更改”部分中,您会看到以下更改:

Methods with the same name as the class are no longer interpreted as constructors. The __construct() method should be used instead.

所以在这种情况下,我们的类构造函数方法需要更新。

修复后,刷新页面,您将看到该插件再次按预期工作。

虽然手动测试确实有效,但这是一个乏味的过程。幸运的是,您还可以使用名为 PHPUnit 的工具自动化大多数测试。这将使您能够持续保护代码免受错误和 PHP 兼容性问题的影响,但这超出了本教程的范围。

如何测试WordPress产品的PHP兼容性

使用 PHPCompatibilityWP 扫描您的代码

您还可以使用一些工具来测试 PHP 兼容性,最有用的是恰当命名的PHPCompatibility工具,它是PHP_CodeSniffer工具的一组规则。

PHP_CodeSniffer 是一个命令行工具,可用于扫描代码中的错误和警告,而 PHPCompatibility 工具是一组规则,可与 PHP_CodeSniffer 一起使用来扫描代码中的 PHP 版本兼容性。

对于 WordPress 开发人员来说,有一个名为PHPCompatibilityWP的特定规则集,它是针对 WordPress 项目的 PHPCompatibility 规则集。

PHPCompatibility/PHPCompatibilityWP 的优点在于您无需配置不同的 PHP 版本即可使用它。您可以将它与现有的 PHP 版本一起使用,它会根据您指定的 PHP 版本的规则检查您的代码。

要安装和使用 PHPCompatibilityWP,您需要安装 Composer,它是 PHP 项目的依赖管理器。

为了让 Composer 工作,您还需要在计算机上安装 PHP,这样您就可以使用 PHP CLI 二进制文件,它允许您在终端中运行 PHP 脚本,而不仅仅是在浏览器中。

安装 Composer 不在本课程的讨论范围内,但您可以在Composer 网站上找到适用于macOS/LinuxWindows操作系统的说明。

您可以在PHP 网站的“安装和配置”部分找到在系统上安装 PHP 的方法。

安装 PHP 后,请确保将 PHP CLI 二进制文件的路径添加到计算机的操作系统路径中,以便您可以从计算机上的任何位置运行 PHP 命令。

您可以通过在终端中运行以下命令来检查是否已安装 PHP:

php -v

同样,您可以通过在终端中运行以下命令来检查是否已安装 Composer:

composer -V

安装 Composer 后,您可以通过在插件目录中运行以下命令来初始化 Composer 项目。如果您已经在插件中使用 Composer,则可以跳过此步骤。

composer init

这将在您的插件目录中初始化一个新的 Composer 项目。您可以接受大多数问题的默认值,但是当它要求您以交互方式定义依赖项(require)并以交互方式定义您的开发依赖项(require-dev)?时,您应该回答“否”。您还可以跳过 PSR-4 自动加载映射。

完成此操作后,您将拥有一个composer.json文件,这是 Composer 用于管理项目依赖项的文件。

接下来,您需要安装 Composer 插件,通过从命令运行以下命令来管理 PHP_CodeSniffer 的安装路径设置。如果你已经安装了这个插件,可以忽略它。

composer config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true

然后,您可以通过运行以下命令来安装 Composer 安装程序插件和 PHPCompatibilityWP 工具:

composer require --dev dealerdirect/phpcodesniffer-composer-installer:"^1.0" 
composer require --dev phpcompatibility/phpcompatibility-wp:"*"

这将在您的composer.json 文件中设置并安装所需的依赖项。

如何测试WordPress产品的PHP兼容性

关于 PHPCompatibility 和 PHPCompatibilityWP 版本的说明。

目前, PHPCompatibility 的稳定版本是9.3.5,最近的嗅探是即将发布的版本 10.0.0 的一部分。发布。 PHPCompatibilityWP 当前的稳定版本是2.1.4

当PHPCompatibility 10.0版本发布时,PHPCompatibilityWP 3.0版本也会发布,这将依赖于PHPCompatibility 10.0版本。

同时,可以安装 PHPCompatibility 的 dev-develop 分支来运行 PHPCS,并在 PHPCompatibility 版本 10.0.0 中发布之前添加 PHP 8 嗅探的尖端功能,详细信息请参阅此WordPress VIP 文档

为此,请运行以下命令为 PHPCompatibility 的 dev-develop 分支指定别名:

composer config minimum-stability dev
composer require --dev phpcompatibility/phpcompatibility-wp:"^2.1"
composer require --dev phpcompatibility/php-compatibility:"dev-develop as 9.99.99"

这些命令会将developPHPCompatibility 分支别名为 PHPCompatibility 允许范围内的 9.x 版本,并设置 PHPCompatibilityWP 安装最新的稳定 2.1 版本。

一旦 PHPCompatibility 10 和 PHPCompatibilityWP 3 发布,应该可以将 PHPCompatibilityWP 版本约束更新为“^3.0”,这将取决于 PHPCompatibility 的版本 10。

安装完所有这些后,您可以在插件文件上运行 PHPCompatibilityWP 工具。

建议的方法是针对特定的 PHP 基本版本运行 PHPCompatibilityWP。在此示例中,您可以通过将testVersion运行时变量设置为 来针对 PHP 7.4 及更高版本运行它7.4-

./vendor/bin/phpcs --runtime-set testVersion 7.4- -p wp-learn-php-compatibility.php --standard=PHPCompatibilityWP

你会看到这个输出:

W 1 / 1 (100%)



FILE: /Users/jonathanbossenger/wp-local-env/sites/learnpress/wp-content/plugins/wp-learn-php-compatibility/wp-learn-php-compatibility.php
-----------------------------------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
-----------------------------------------------------------------------------------------------------------------------------------------
 15 | WARNING | Use of deprecated PHP4 style class constructor is not supported since PHP 7.
-----------------------------------------------------------------------------------------------------------------------------------------

Time: 33ms; Memory: 8MB

请注意如何报告与手动方法相同的错误,但这次更具体。它准确地告诉我们错误发生在哪一行以及错误是什么。

现在我们可以修复类构造函数错误。

注意事项

使用 PHPCompatibilityWP 等工具时的考虑因素之一是它无法检测到每个兼容性错误。

例如,从 PHP 7.4 到 PHP 8.0 的其他更改之一是删除了与对象一起使用的功能array_key_exists(),而是property_exists()应该使用类似的功能。

但是,PHPCompatibilityWP 工具不知道您传递给的变量array_key_exists()是数组还是对象,因此它无法就此发出警告。

这就是自动化手动测试会派上用场的地方。当您在新的 PHP 环境中运行测试时,测试将失败,从而使您遇到可能的问题。启用日志记录后,您会看到错误记录到日志文件中。

最终,将 PHPCompatibility 这样的工具与我们讨论过的自动化测试和手动测试过程相结合,将允许您确保您的插件与当前和未来版本的 PHP 兼容。


联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/6550/

(1)
上一篇 2024年 3月 27日 下午5:05
下一篇 2024年 3月 28日 上午10:22

相关推荐

  • WooCommerce实用教程:如何设置仅登录用户可见的专属价格

    引言: 在 WooCommerce 驱动的网站上,有时我们希望产品价格仅对登录用户显示,以促进用户注册并提供更丰富的用户体验。本教程将指导您如何在 WooCommerce 中实现这一功能,特别适用于wordprees网站。 步骤 1:理解基本原理 首先,需要了解 WordPress 的 add_filter 函数。这个函数允许我们在网站的特定环节修改数据。在…

    2023年 12月 18日
    00246
  • 如何使用 Google Site Kit 为 WordPress 网站添加 Google Analytics: 简单指南

    如果你正在运营一个网站,你可能会使用谷歌的服务来进行数据分析、性能监测等。管理这些服务可能会有些复杂,但现在有了一个名为“Site Kit for WordPress”的插件,可以让这一切变得简单。 通过使用官方的Google Site Kit插件,你可以把你喜欢的Google服务连接到你的WordPress网站上。如果需要,你还可以直接在WordPress…

    2024年 3月 25日 WordPress自学建站
    0049
  • 四种方法来扩展 WordPress 功能:添加自定义函数指南

    探索如何为 WordPress 添加自定义功能:一份实用指南 作为一个拥有多年 WordPress 后端开发经验的人,我尝试过多种方式来定制 WordPress,以满足自己和他人的特定需求。最常用的方法之一是创建自己的 WordPress 自定义功能插件。但正如你将在本文中看到的,这并非唯一的选择,也不总是最佳选择。 虽然本指南主要面向开发者,但项目经理也可…

    2024年 3月 21日 WordPress自学建站
    0037
  • WordPress导航块教程:轻松创建导航菜单

    欢迎来到本次WordPress导航块使用教程。今天,我们将一步步教您如何利用WordPress的导航块来创建和优化您的网站菜单。无论您是初学者还是希望提升网站导航的高级用户,本教程都将为您提供实用的指导和建议。 引言:认识WordPress导航块 WordPress的导航块允许用户以直观的方式管理网站的菜单和链接。它支持多种类型的内容添加到您的导航菜单中,包…

    2024年 3月 28日 WordPress自学建站
    0049
  • 通用 API – 仪表板小部件

    我们常常会听到WordPress的仪表板小组件API,那么这个到底是个什么东西呢。了解这个API是用来做什么的,为什么它对你的WordPress站点如此重要,以及如何轻松地添加小组件到你的仪表板。提升你的站点功能。 什么是仪表板小部件 API 仪表板小部件API是WordPress提供的一套工具,它让你能够轻松地在仪表板上添加、删除或修改小工具。这非常适合那…

    2024年 3月 30日 WordPress自学建站
    0044

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信