массивы — 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 исправил недостаток в предыдущих версиях?

0

Решение

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, который сделал это изменение, также имел побочные эффекты, которые вы заметили, и как кто-то еще прокомментировал в разделе заметок этой страницы.

Вы должны инициализировать вашу переменную в массив с самого начала, чтобы работать во всех версиях.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]