Изменить на PHP7 с PHP5 - PullRequest
       13

Изменить на PHP7 с PHP5

0 голосов
/ 11 февраля 2019

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

Если мы тестируем этот код

  <?php

  /* EAMPLE A */
  $tLisTim="";
  $i=0;
  $tLisTim[$i]=100;
  $i=$i+1;
  $tLisTim[$i]=200;

  var_dump("A");
  var_dump($tLisTim);

  /* EAMPLE B */
  $tLisTim=[];
  $i=0;
  $tLisTim[$i]=100;
  $i=$i+1;
  $tLisTim[$i]=200;

  var_dump("B");
  var_dump($tLisTim);

  ?>  

мы получим следующие результаты:

  PHP 5.6

  string 'A' (length=1)
  array (size=2)
    0 => int 100
    1 => int 200

  string 'B' (length=1)
  array (size=2)
    0 => int 100
    1 => int 200


  PHP 7.1

  string 'A' (length=1)
  string '12' (length=2)

  string 'B' (length=1)
  array (size=2)
    0 => int 100
    1 => int 200

Проблема в том, что в PHP7 нет предупреждений, помогающих нам правильно перенести все эти различия.

Как я могу обнаружитькогда мы пытаемся использовать переменную с неправильным типом?

Спасибо,

1 Ответ

0 голосов
/ 11 февраля 2019

Предупреждений нет, поскольку PHP 7.1 не удалил поддержку структуры вашего кода:

Модификация строки символом в пустой строке теперь работает как для непустых строк, то есть записи в outсмещения диапазона дополняет строку пробелами, где нецелые типы преобразуются в целое, и используется только первый символ назначенной строки.Раньше пустые строки, где молча обрабатывали как пустой массив.

http://php.net/manual/en/migration71.incompatible.php#migration71.incompatible.empty-string-modifcation-by-character

Это все еще совершенно верно:

$tLisTim="";
$tLisTim[0]=100;
$tLisTim[1]=200;

но он ведет себя иначе, чем раньше.

Вместо того, чтобы молча преобразовывать в массив, он устанавливает первую позицию строки в 1, а вторую позицию в 2.

Это выдаст ошибку:

$tLisTim="";
$tLisTim[]=100;

Это выдаст предупреждение:

$tLisTim="";
$tLisTim['g']=100;
...