PHP 7.2 is_array не является истинным - PullRequest
0 голосов
/ 19 октября 2018

Все, у меня есть класс с некоторыми переменными, определенными вверху, например, так:

var $conditionStyle = '';

Позже я могу написать одну вещь следующим образом:

$this -> conditionStyle = 'someStyle';

Или несколько вещей, таких какthis:

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

Далее я бы посмотрел, был ли conditionStyle массивом или нет:

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

В php 7.0 и более ранних версиях это оценивалось нормально.С 7.2 я должен использовать settype(), или он не может правильно оценить.Это проблема с 7.2 или 7.2 исправил недостаток в предыдущих версиях?

1 Ответ

0 голосов
/ 19 октября 2018

PHP 7.1 изменил поведение этого кода:

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

В <7.1, <code>$x равно:

array (
   3 => 'foo',
)

, а в> = 7.1, это:

string '   f'

См. Его на сайте 3v4l.org.

Это изменение плохо , упомянутое в Замечаниях по выпуску PHP 7.1 :

Оператор пустого индекса больше не поддерживается для строк
Применение оператора пустого индекса к строке (например, $ str [] = $ x) приводит к фатальной ошибкевместо тихого преобразования в массив.

У PR, который внес это изменение, также были побочные эффекты, которые вы заметили, и как кто-то еще прокомментировал в разделе «Примечания» на этой странице.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...