PHP 8.2:它对 WordPress、插件和开发者意味着什么?

news2024/11/27 11:36:30

PHP 8.2.0于 2022 年 12 月 8 日首次亮相。作为一项重大更新,它带来了性能改进和更简单的语法。PHP 8.2 引入了更高的类型安全性作为一项功能,将nullfalsetrue作为独立类型。可能挑战 WordPress 开发人员的最大变化之一是添加了只读类,它不允许使用动态属性。

动态属性已被弃用,并将在 PHP 9 或可能的 PHP 10 中产生致命错误。虽然可能会很痛苦——尤其是对于 WordPress 核心——弃用是一个关键特性,也是 PHP 送给开发人员的礼物。

让我们来看看 PHP 和 WordPress 最近的发展。WordPress 开发人员如何在利用有利于最终用户的新功能的同时保持向后兼容性?这是两个开源项目之间关系的关键主题。

WordPress 核心保持显着的向后兼容性,在不支持旧版本时没有计划的生命周期结束日期。由于向后兼容性如此重要,因此由 WordPress 企业决定自己的产品或服务生命周期。他们将支持哪些版本的 PHP ?

与最低需要 PHP 7.4 的WooCommerce 相比,WordPress 核心目前只推荐 PHP 7.4 或更高版本。它“也适用于”PHP 5.6.20,该版本在 2018 年底达到了生命周期结束日期。WordPress 项目注意到这一点并警告说,使用不受支持的 PHP 版本“可能会使您的网站面临安全漏洞”。(WordPress.org 要求)

幸运的是,目前只有 5.1% 的 WordPress 网站使用 PHP 5.6,而且只有 2% 使用更旧的版本。20% 使用 PHP 7.0 到 7.3,最大的一组 (56.7%) 使用 PHP 7.4。(WordPress.org 统计数据)

目录  隐藏 

PHP 7.4 已达到其生命周期的终点

向后兼容性与稳定性、前瞻性思维与创新之间的权衡

遥测可以告诉您何时“面对”

提高最低 PHP 要求的最佳时机

案例研究:iThemes Security Pro

案例研究:GiveWP

弃用通知推动开发向前发展

在 PHP 8.2 之后不使用动态属性

不断发展的优雅代码之美

WordPress Core 如何跟上 PHP 的步伐并保持向后兼容性

所有的发展都是维护……

更正确的代码可能更安全

……所有维护都是艺术

“星期一早上谁来收垃圾?”

“所有编程都是维护编程”

PHP 7.4 已达到其生命周期的终点

不幸的是,PHP 7.4 刚刚在 2022 年 11 月底达到了 EOL 日期。PHP 8.0 在 2023 年的大部分时间里提供官方安全支持的时间还不到一年。当前受到积极支持的版本 PHP 8.1 将在年底过时。2024 年的 PHP 8.2,刚刚发布了第一个稳定版本,将在 2025 年 12 月之前提供安全支持。

这是一个快速的发布周期,WordPress 生态系统努力跟上它也就不足为奇了。大约一半的互联网在 WordPress 上运行,这是一艘不能快速转向的大船。这更像一种平衡行为,而不是奔向最前沿的竞赛。PHP 8 有很多好处。有一些强大的性能增强功能,例如运行时的即时 (JIT) PHP 编译,可以更快地执行并减少内存使用。

向后兼容性与稳定性、前瞻性思维与创新之间的权衡

我们应该迎合尽可能广泛的用户群体还是保持 PHP 的流行?这个问题一直是困扰WordPress开发者、主机和产品公司的一个难题。没有单一的正确答案。所有的决定都是权衡。

拥有长期客户和遗留网站的机构和自由职业者面临同样的问题。他们应该更新最低 PHP 要求吗?这样做可能会迫使他们现有的客户对他们的网站进行重大更改或看到他们崩溃。

一方面,与 PHP 保持同步可以提高安全性和性能。最新的编程概念和功能可能对开发人员向 WordPress 插件添加新功能很有价值。另一方面,延迟最低要求的 PHP 版本将取悦广泛的客户群。然而,稳定性在某些时候会变得自满和过时。

这是一种“现在付钱或以后付钱”的情况。最终,您必须面对并更新最低 PHP 要求。

遥测可以告诉您何时“面对”

对软件产品的任何重大更改都会导致大量支持请求。有关用户环境的良好数据和遥测有助于确定提高最低 PHP 版本要求的中断时间最少。这就是为什么插件所有者需要了解其用户的 PHP 版本采用情况。

WordPress.org 跟踪每个 WordPress 站点使用的 PHP 版本。WordPress 插件并非如此。开发人员需要使用自己的工具收集这些数字。

优先考虑向后兼容性是一项高维护工作。支持非常庞大和多样化的用户群对最终用户来说非常好,但这意味着开发人员必须让他们的代码在许多不同的环境中工作。“我喜欢在添加新功能时支持旧的 PHP 版本,”——从来没有开发人员这样说过!

他们不仅要担心遗留的 PHP,还有遗留数据库和 WordPress 堆栈中的许多其他变体。当存在大量具有过时元素的 WordPress 服务器环境时,边缘案例会突然出现,甚至会让专家感到困惑。

提高最低 PHP 要求的最佳时机

iThemes Security Pro 7.2 版本是一个很好的例子,它提高了 WordPress 产品的最低 PHP 要求,以便为现有客户提供创新和稳定性。

案例研究:iThemes Security Pro

从 7.2 版本发布开始,iThemes Security Pro 需要 PHP 7.3 或更高版本,最高支持 8.1。iThemes Security Pro 团队决定更新他们的 PHP 要求以实施 WebAuthn 框架。实施需要 PHP 7.3+ 的库来管理加密和公钥。iThemes Security Pro 7.2 中引入的2FA 、密码和生物识别登录功能是这一决定的直接结果。在密码被破解的时候,iThemes 安全团队首次将无密码登录引入 WordPress,作为主要的用户身份验证体验。

通过重写 WebAuthn 库以与旧版本的 PHP 兼容,可以为 iThemes Security Pro 构建这些新功能。当然,这将需要更多的工作并创建额外的代码来维护。明智的做法是以适度的速度跟上 PHP 社区的步伐,采用需要 PHP 7.3 或更高版本的依赖项。他们的大多数用户已经在那里。这就是 iThemes 安全开发团队决定提高新用户和现有用户的最低 PHP 要求的原因。

案例研究:GiveWP

对于大量投资于古腾堡块编辑器的 WordPress 产品(如 GiveWP),管理变更可能更具挑战性。WordPress 核心的稳定性和缓慢的变化速度可能会让后端 PHP 开发人员感到沮丧,但它允许前端 JavaScript/React 开发人员推动平台向前发展。

GiveWP 的开发经理 Jason Adams 指出,它们不必向后兼容,因为随着站点编辑器的发展,它们可以跨版本迁移用户。然而,“没有 PHP 迁移这样的事情,”他评论道。最终,他们将不得不适应 PHP 9 架构并远离 PHP 8.2 中新弃用的功能。

WordPress 生态系统中的每个产品都没有单一的“正确时间”来更新最低 PHP 要求。“这不是你可以从哲学上解决的问题,”亚当斯告诉我。这真的归结为判断时间。有多少用户会受到负面影响?如果 90% 或更多是在 PHP 7.2 或 7.4 上,将最低要求提高到该级别是可行的。

Adams 说,这些数字可能会因产品的特定用户群而有很大差异。技术熟练的客户使用的产品往往更接近当前支持的 PHP 版本。像 GiveWP 这样的产品,许多非营利组织都在使用它,需要更加重视向后兼容性。另一种方法是在将受支持但看不到添加新功能的长期版本中分支遗留代码。当用户准备好进行升级时,他们可以迁移到为将来的 PHP 兼容性而构建的新的主要版本。

弃用通知推动开发向前发展

WordPress.com 刚刚推出 PHP 8.2作为其商业和电子商务计划的一个选项,并激活了托管功能,在 WordPress.org 生态系统中,精心设计的旧代码不太可能在下一个主要 PHP 版本发布时崩溃或变得不安全. 尽管 WordPress.org 核心代码库官方仅提供对 PHP 8.0 的“测试版”支持,但它通常与最新版本的 PHP 配合得很好,支持良好的插件也是如此。他们不会抛出致命错误或解析错误。在调试打开的情况下,您甚至不应该看到很多警告。您可能会看到很多已弃用的函数通知,它们还不是错误。

快速 PHP 发布周期的挫折与开发人员陷入混乱有很大关系重构他们的代码并追赶修复 PHP 已弃用的特性。这项关键工作可能会让他们用更少的时间来探索和创新最新 PHP 版本带来的新概念和功能。

在 PHP 8.2 之后不使用动态属性

Nikita Popov在 PHP 9 中逐步淘汰动态属性的原因很好地说明了 PHP 朝着更具弹性的代码和编程约定发展的方向:

进行此更改的动机是双重的:防止在常见情况下出现错误(由于拼写错误或重命名),并明确有意使用。核心问题是,从不存在的属性中读取会发出诊断,使问题立即显现出来,而写入不存在的属性则完全没有提示。这时 PHP 没有任何提示表明程序员犯了错误。

不断发展的优雅代码之美

Brent Roose 关于从 PHP 5.6 到 8.2 的演变的两分钟视频是对 PHP 从 2014 年到现在的发展历程的精彩而简单的直观说明。使用简单的数据传输对象示例,Roose 展示了 PHP 5.6 代码如何在通往 PHP 8.2 的过程中缩减为更简单、整体更优雅的代码块。

正如 Roose 在处理动态属性(在 PHP 8.2 中已弃用)的技巧中指出的那样,在弃用警告变成致命错误之前,开发人员应该有足够的时间来更新他们现有的代码。然而,这条跑道将很快消失,而 WordPress 是一个特例。Tonya Mork 在 Trac 中有一个被接受的提案,用于处理WordPress 核心中的未知动态属性弃用。她和 Juliette Reinders Folmer 担心 WordPress 开发人员没有足够的时间来重构他们的代码。不能忽视为一个已有 20 年历史的项目保持向前和向后兼容性的特殊挑战。Mork、Reinders Folmer 和 Sergey Biryukov 基本上是这项艰巨任务的无名英雄。

WordPress Core 如何跟上 PHP 的步伐并保持向后兼容性

在讨论PHP 8.2 中的动态属性和魔法方法时,Mork 和 Reinders Folmer 指出,WordPress 在 PHP 3 和 4 中的根基使其处于一个稳固的过程编程世界中,而 PHP 作为一种面向对象的语言继续发展。核心开发人员需要找出一种方法来维护当今 PHP 中遗留代码的行为,而不破坏向后兼容性,“并且仍然使代码更好、更安全,并减轻 PHP 8.2 动态属性的弃用,”正如 Reinders Folmer 所说。“[WordPress 核心] 没有 [向后兼容性] 违反规则,我们实际上让自己的生活变得非常困难,”她在视频中指出。

“这是有充分理由的,”Mork 回应道——“它是为了用户。用户有信心他们可以按下那个按钮并升级,并且我们已经考虑了向后兼容性,我们已经优先考虑它。它是我们的基石……因此用户可以放心升级。”

所有的发展都是维护……

为了在 WordPress 核心中保持向后兼容性,尝试向后移植“现代”PHP 以与 PHP 的两个先前主要版本一起工作是一个独特的挑战。插件开发人员可以更轻松地以可以利用新功能的方式更新他们的代码,例如 PHP 8.2 的readonly类和动态属性弃用。大部分这项工作在很大程度上也是一种维护形式。

在架构上,PHP 8+ 的变化将重点放在编程概念上,例如不变性。根据 Jacobs 的说法,不可变数据结构“并不能从本质上解决安全问题”,但它们确实可以帮助开发人员的代码更不易出错且更正确:

我不会说不可变数据结构天生安全,而可变数据结构不安全。相反,不可变数据结构有助于消除可能导致安全问题的编程错误。通过减少我们的代码可以存在的不同状态的数量,我们可以降低代码的复杂性,从而减少出错的机会。

更正确的代码可能更安全

将代码维护为积极支持的 PHP 版本标准的最佳理由是降低安全风险。在 Adams 看来,PHP 8.2 带来了有用的“护栏”,但很少能激发程序员的兴趣或被视为游戏规则的改变者。诸如#[\SensitiveParameter]属性之类的东西可能更具有实际意义,因为它允许敏感数据从经常转到第三方服务的堆栈跟踪中过滤掉。在 PHP 8 中引入的属性是 Adams 挑选的最后一项创新,这项创新引起了他的注意,因为它可以实现以前无法做到的事情:“从元视角描述某些东西 [如类、变量、方法等]。”

利用 PHP 8.0 到 8.2 和未来版本中的新功能是开发人员创造力大放异彩的地方,但简单地支持这些版本,这样插件和 WordPress 核心就不会破坏它们,既实用又重要。

……所有维护都是艺术

Jeff Atwood 有一篇古老但出色的博客文章,标题为“维护编程的崇高艺术”,我最近阅读了这篇文章,这要归功于 Kale Davis 的 Hacker Newsletter。“维护编程被广泛视为清洁工作,”阿特伍德写道。这让我想起了艺术家Mirele Laderman Ukeles,他的“维护艺术宣言”一直让我印象深刻,因为它与编程和 Web 开发非常相关:

“星期一早上谁来收垃圾?”

1969 年,Laderman Ukeles 是一位年轻的艺术家和新妈妈,当时她撰写了宣言并宣称维护就是艺术。她对我们将尖端艺术作品和高地位劳动与使它们成为可能的工作分开的方式感到沮丧。育儿、教学或只是举办艺术展是艺术家所做的事情,但这些事情并未被视为其工作的一部分。为了指出这一点,Laderman Ukeles 做了一个令人难忘的展览,以她作为艺术博物馆看门人的身份为主题。然后,她(正在进行的)职业生涯的大部分时间都是作为纽约市卫生局的驻场艺术家度过的。她在该职位上的第一个项目是亲自感谢所有 8,500 名环卫工人“让纽约保持活力”。

阿特伍德对编程也有类似的看法。他引用了软件工程领域的几位重要人物的话说,贬低维护工作是完全错误的。Robert L. Glass 认为“维护是一项重大的智力挑战,也是一种解决方案,而不是一个问题”,因此对于最熟练的人来说,它应该被视为一项重要任务。Joel Spolsky很久以前就写道,开发人员很懒惰,他们“总是想扔掉代码并重新开始”的原因是“阅读代码比编写代码更难”。

“所有编程都是维护编程”

在与 Andy Hunt 的对话中,Dave Thomas 争辩说:“所有编程都是维护编程,因为你很少编写原始代码。…… 您大部分时间都处于维护模式。所以你不妨硬着头皮说,“我从第一天开始就在维护。” 适用于维护的纪律应该适用于全球。” Hunt 表示同意,“当您第一次输入代码时,只有前 10 分钟才是原始代码。就是这样。”

Atwood 最终倾向于这种观点,但与我从 Jason Adams 和 Timothy Jacobs 那里听到的常见 WordPress 开发人员观点相呼应。

WordPress开发/维护的特殊艺术?“这是一种平衡选择。”

希望本文有助于您了解PHP 8.2和WordPress的兼容性问题,您也许还想看看最新的WordPress 6.2 “Dolphy 海豚”。

点击阅读PHP 8.2:它对 WordPress、插件和开发者意味着什么?原文 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM/Layui框架的火影忍者风格学生宿舍管理系统

目录 1、项目简介 2、使用技术 3、功能介绍 实现的主要功能: 4、所有页面 基于SSM/Layui框架的火影忍者风格学生宿舍管理系统 1、项目简介 本项目是一套基于SSMLayui的高校宿舍管理系统,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实…

搭建动态网站( Discuz论坛)

目录标题 搭建动态网站1.linux平台部署web服务2.配置web服务(1)安装web服务(2)根据配置定义加载网页资源文件的路径(3)根据配置创建资源文件(4)重启服务 3.部署mariadb数据库4.安装P…

【力扣周赛】第345场周赛

【力扣周赛】第345场周赛 6430: 找出转圈游戏输家题目描述解题思路 6431: 相邻值的按位异或题目描述解题思路 6433: 矩阵中移动的最大次数题目描述解题思路 6432: 统计完全连通分量的数量题目描述解题思路 6430: 找出转…

【Hello Algorithm】归并排序及其面试题

作者:小萌新 专栏:算法 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:介绍归并排序和几道面试题 归并排序及其面试题 归并排序归并排序是什么归并排序的实际运用归并排序的迭代写法归并排序的时间复杂度 归并排序算法题小…

STM32F103 晶振问题详解

博主自制开发板,用的 STM32F103RCT6,设计时 8M 晶振并联了个 1M 电阻,实测发现: 1、软件延时 1s ,实际延时 9s,拆掉 1M 电阻问题消失。 2、部分代码下载进去后单片机不工作。(实测晶振不起振 o…

MySQL的高级语句

一、SQL高级语句 1、 SELECT 显示表格中一个或数个栏位的所有资料 语法:SELECT "字段" FROM "表名"; select * from test1; select name from test1; select name,sex from test1;2、DISTINCT 不显示重复的内容 语法:SELECT D…

win11安装java8后,jps、jvisualvm等jdk工具无法使用的问题

文章目录 基础环境1 找不到jps、jvisualvm等命令问题1.1 原因1.2 解决方案 2 jdk工具无法正常使用问题2.1 原因2.2 %TMP%\hsperfdata_username文件夹2.3 解决方案 基础环境 jdk-8u261-windows-x64,一直下一步,安装到d盘下 1 找不到jps、jvisualvm等命令…

华为基于dhcp snooping表的各种攻击防御

所有的前提是必须开启了dhcp snooping功能 一、dhcp 饿死攻击: 接口下或vlan下开启 dhcp snooping check dhcp-chaddr enable 开启二层源mac和chaddr一致性检测 dhcp snooping max-user-number 1 接口上手动配置的绑定成员数量(可选择项) …

C++常用函数语法

C常用函数详解 memset()函数字符串的插入和删除字符串替换解析字符串查询解析substr函数 memset()函数 memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。 其原型是:void* memset(void *_Dst, int _Val, size_t _Size) _Dst是目标起始地址&…

MySQL的日志管理,备份及恢复

一.MySQL 日志管理 MySQL 的日志默认保存位置为 /usr/local/mysql/data MySQL 的日志配置文件为/etc/my.cnf ,里面有个[mysqld]项 修改配置文件: vim /etc/my.cnf [mysqld] 1、错误日志 错误日志,用来记录当MySQL启动、停止或运行时发生…

chatGPT免费站点分享

下面的应该都能用,试试吧... ChatGPT是一种人工智能聊天机器人,能够生成虚拟语言和交互回复。使用ChatGPT,您可以与机器人进行真实的交互,让机器人根据您提出的问题或请求来生成回复。但是,在使用ChatGPT时&#xff0…

IOS上传到App Store教程

引言 大家都知道开发APP包含安卓和IOS,而安卓申请商家需要在各大厂家的开发者中心进行上传,比如华为、小米、魅族等等开发者中心。 而苹果只有一个官网,但是苹果要上传IPA(苹果的安装包)需要使用mac电脑进行上传,而我平时用的win…

vue3(setup语法糖)+typescript+echarts5大屏可视化项目(底部附源码地址)

最近在学习echarts5想结合着自己所学的vue3ts结合起来做个demo, 效果图如下: 登录页 首页: 每个模块支持放大全屏的功能 踩坑: echarts实例化不建议使用ref,echarts内部机制导致的在main.ts中将echarts挂载到app的实例上 let app createApp(App) app.config.globalPrope…

企业战略管理:精要

一、企业战略管理的概念与流派 国内外学者对企业战略和企业战略管理的各种理解— 安索夫:企业在确定战略前,应该先确定自己的经营性质安德鲁斯:企业战略管理是一个决策模式,决定企业的目标,提出实现目标的方针和计划&…

新能源 石油化工 HJL-98/B数字式电流继电器 瞬时动作,过负荷、短路保护 JOSEF约瑟

名称:数字式交流电流继电器,品牌:JOSEF约瑟,型号:HJL-98/B,动作电流:30500mA,工作电压:AC220V/AC380V,安装方式:柜内导轨,零序孔径&am…

基于STM32F103C8T6的物联网温湿度光照烟雾监测系统

1、系统组成:STM32F103C8T6最小系统、S8050三极管、有源高电平触发蜂鸣器、ESP8266_01S模块、DHT11温湿度传感器、0.96OLED显示屏、BH1750光照度传感器、MQ2烟雾浓度传感器、LED灯、碳膜电阻(300欧)、独立按键、排针若干、杜邦线若干、微信小…

使用docker构建并部署MySQL5.7镜像

使用docker构建并部署MySQL5.7镜像 前言一、docker中部署MySQL主要有哪几种方式?二、CentOS 镜像中构建 MySQL 容器1.编写Dockerfile2.初始化MySQL 三、MySQL 官方镜像中构建容器1. 拉取官方镜像2. 运行镜像3. 配置镜像外网访问 四、MySQL 容器初始化脚本1. 将sql文…

一不小心,你就掉进了Spring延迟初始化的坑!

前言 书接上回&#xff0c;之前我们有聊到 Spring 的延迟初始化机制&#xff0c;是什么&#xff0c;有什么作用。今天跟各位大佬分享一下&#xff0c;我在使用 Spring 延迟初始化踩过的一些坑。 List<坑> 坑列表 new ArrayList<>(2); 首先&#xff0c;让我们回顾…

STM32-单通道ADC采集(DMA读取)实验

关于ADC的一些原理和实验我们已经有了2篇笔记&#xff0c;链接如下&#xff1a; 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 实验要求&#xff1a;通过ADC1通道1&#xff08;PA1&#xff09;采集电位器的电压&#x…

专升本资料怎么找?可以通过哪些渠道找到?

统招专升本专科生每个人只有一次考试的机会&#xff0c;近年来越来越多的人注意到学历的重要性&#xff0c;报考的人也越来越多&#xff0c;竞争激烈。 所以想要成功上岸&#xff0c;光靠靠努力可不行&#xff0c;拥有一个好的复习资料你就成功了一半。 随着粉丝量越来越大&am…