首页 > 解决方案 > PHP 7.2 is_array 不评估为真

问题描述

所有,我有一个类,在顶部定义了一些变量,如下所示:

var $conditionStyle = '';

后来我可以这样设计一件事:

$this -> conditionStyle = 'someStyle';

或者像这样的多件事:

$this->conditionStyle[$this->styleRowsCount] = 'someStyle';

接下来我会看看 conditionStyle 是不是一个数组:

if(is_array($this-> conditionStyle) {...}

在 php 7.0 和更早的版本中,这评估得很好。对于 7.2,我必须使用settype(),否则无法正确评估。这是 7.2 的问题还是 7.2 纠正了以前版本中的缺陷?

标签: phparraysvariable-types

解决方案


PHP 7.1 改变了这段代码的行为:

$x = '';
$x[3] = 'foo';

在 < 7.1 中,$x是:

array (
   3 => 'foo',
)

而在 >= 7.1 中,它是:

string '   f'

在 3v4l.org 上在线查看。

PHP 7.1 发行说明中很少提及此更改:

字符串不再支持
空索引运算符 将空索引运算符应用于字符串(例如 $str[] = $x)会引发致命错误,而不是静默转换为数组。

进行此更改的 PR 也有您注意到的副作用,正如其他人在该页面的注释部分中评论的那样。

您应该在一开始就将变量初始化为数组以在所有版本中工作。


推荐阅读