解决 PHP 7.2 环境中 WordPress5.0.2 的 count() 调用问题

报错原因

首先来看一下 count() 的方法原型。其中 $array_or_countable 参数,需要是数组或者 Countable对象(Countable 接口能让对象可以被用于count函数的能力)。在 PHP 7.2 中对于 count() 有一个新增的变更,具体可参考官网文档

Version Description
7.2.0 count() will now yield a warning on invalid countable types
passed to the array_or_countable parameter.

也就是说在 7.2 版本中当无效的类型传递给 $array_or_countable 参数时,count() 会产生警告,所以我们可以知道,上面提到的报错应该是传了无效的类型给 count() 才导致发出的警告,不过这里还需要具体环境具体分析,接下来我们就看一下问题排查。

 

解决问题

报错位置 /wp-includes/post-template.php on line 284

接下来我们去看下/wp-includes/post-template.php 在284行有些啥东西吧。

看代码发现 284 行在一个名叫get_the_content 的方法中(上面的点仅截取了部分重要代码和注释,问题代码在第 5行),而且 count 调的 $pages也是一个数组。那么只能说明在不知道哪里调用 get_the_content 方法的时候,传过来的 $pages是一个非数组,所以出现了这个问题,那么应该在调用 count 之前确保 $pages 是一个数组就成了,所以我们这里强制类型转换就行了 (array)$pages 就可以了,所以修改之后的代码如下。

 

战后总结

把改好的代码上传后,问题成功的解决啦 ,大家如果在使用 WordPress 5.0.2 或者之前的版本使用 PHP7.2 遇到同样问题的话,可以参考这里的方法修复,然后安心等待官方的修复版本。

bnightning

bnightning

你现在的生活,也许不是你想要的,但绝对是你自找的。

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>