您的位置 首页 php

"新"的WordPress和"老"的PHP延展(Spread)运算符:写在5.3发布前

作为一款拥有了20年发展史,并占据全球互联网流量近34%的系统, WordPress 核心的每次更改,都必须小心翼翼,因为这几乎就意味着成千上万的主题和插件,可能都会随之而需要进行修正。也正因为此,WordPress的步伐开始变得越来越迟钝,直到5.2,WordPress才放弃了对PHP 5.2 ~ 5.5的支持,这也意味着,其核心的开发团队可以开始利用相对较新的PHP语法功能(其实很多也在5年之前就已支持),来提高整个核心的性能,并实现代码的优化(包括代码的 可读性 )。

近日,WordPress正式向业界宣告了关于5.3版本WordPress的发布计划,其中,技术上最值得关注的点之一,则是他们对新的PHP数组延展运算符(Spread)的引入和使用。为了方便WordPress的开发者,尤其是很多因为仅在WordPress下开发,所以忽视了对PHP语言,在近些年来的发展情况进行跟踪的开发者,可以更好的利用这一老的“新”技术,下面,对此来进行一个简要的说明。

声明 : WordPress 5.3中的更改,预计不会到影响主题和插件

除非在极少数情况下,这些主题和插件的开发者,重载了 wpdb::prepare() 方法。

PHP 5.6中的延展运算符(Spread)

从PHP 5.6开始,PHP引入了延展运算符,其基本上被使用在了两个方面,即:

1、用于函数声明中,可变参数部分的声明

可变参数的函数,在PHP中存在多年了,在过去,开发人员通过使用 func_get_args() func_get_arg() func_num_args() 等函数,在广泛的使用着这一便捷的方式。

但是,也带来了一个重大的问题,即:

如果不手动编写详细的说明文档,函数的使用者,在不阅读源代码细节的情况下,根本不知道是否需要向这些函数传递参数,以及如何传递参数!

到了PHP 5.6中,开发人员则开始获得了一种新的便利(这当然不是一个新东西,近年来,很多语言都先后脚的实现了这一功能),即可以在函数的声明中,通过

的方式,来表示此处,该函数接受一个可变数量的参数。

比如,我们可以用这样的方式,来声明一个可传入多个参数的乘法函数:

显然的,对于使用延展运算符声明的函数参数变量,在函数体内,可以视为是一个一般性的数组(Array)变量来处理,范例中 foreach 代码部分展示了这一点。

调用的方式也很简单,比如:

一看即明,在此就不赘述了。

2. 还可以反过来,通过延展运算符,直接将数组(Array)压入到相关函数调用中

还是以乘法为例,假如说,我们现在已经定义了一个使用三个参数组成的函数,如下代码所示:

一般情况下,调用该函数时,你需要手动向函数传递 x、x、x、y 和 $z 的参数值,

哪怕它们原来就已经存在在了某个数组中!

比如像这样:

在PHP 5.6之前,我们需要将numbers[0]、numbers[0]、numbers[0]、numbers[1] 和 $numbers[2]分别作为函数的参数,传递到reserve_multiply中,而借助于新的延展运算符,这一调用过程则得到了极大的简化,代码也变得整洁许多。

WordPress核心中的延展运算符

在了解了关于PHP 5.6后,关于延展运算符的一般使用原则后,下面,则不妨实际的来看下,WordPress在引入了这一运算符后,所实现的一些代码改善。

以实际的核心函数 current_user_can() 为例,该函数的作用,是用来检测当前的用户是否有特定的权限,比如说,判断当前登陆用户,是否有权限可以编辑ID为123的帖子(Post),可以这样来调用这个函数 :

而在WordPress 5.2及更早版本中,这一功能的实现代码如下:

显然的,为了确保该函数,在检测某些权限时,比如上述的 edit_post ,允许传入其他的参数,WordPress 5.2及其更早的版本,必须在其函数体内:

使用func_get_args()获取所有参数,并将其中从第2个参数开始的内容(第1个参数对应的,实际上是$capability),重新切片组成新的,正确的$args数组!

这是非常侵入式且不雅致的,充满了各种“奇妙”的魔法,虽然它确实可以实现目标。

而到了WordPress 5.3,相同的功能,被简化成:

与早期版本相比,借助于延展运算符,新的 current_user_can 函数,不仅仅是对于其使用者更加“友好”了:起码使用者,仅仅只需要借助于函数本身的声明,就可以很清楚的知道,这里可以根据需要传入 $args 参数。

更为重要的是,整个更改,在代码可读性上也获得了极大的提高。看到WordPress团队,能够利用到这些新的 PHP技术 ,来对核心代码进行改进,应该说,我还是非常高兴的。

也希望WordPress的开发者们,也能跟上这个快速的时代,毕竟,其实PHP 7.4,都即将正式发布。

也再次感慨:很多时候,对于一个“古老”的系统来说,他的那些历史沉淀,既是他的辉煌,也真的可能会成为他格格不入于新的时代、新的技术的最大羁绊!

祝WordPress好运。

文章来源:智云一二三科技

文章标题:"新"的WordPress和"老"的PHP延展(Spread)运算符:写在5.3发布前

文章地址:https://www.zhihuclub.com/153462.shtml

关于作者: 智云科技

热门文章

网站地图