PHP 7.2 is_array不是正确的

时间:2018-10-19 03:33:16

标签: php arrays variable-types

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

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纠正了先前版本中的缺陷?

1 个答案:

答案 0 :(得分:4)

PHP 7.1更改了此代码的行为:

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

在<7.1中,$x是:

array (
   3 => 'foo',
)

在> = 7.1时,是:

string '   f'

See it online at 3v4l.org.

此更改在PHP 7.1 Release Notes中被严重地提及:

  

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

进行此更改的PR也有您注意到的副作用,在该页面的“注释”部分中为someone else commented

您应该从一开始就将变量初始化为数组,以在所有版本中使用。