Еще не вышел PHP 7.2, а уже идет полным ходом работа над следующими версиям. Например, в 7.3 реализована оптимизация sparse conditional constant propagation. Это позволяет интерпретатору упростить вот такую функцию:
Class C { public $i; }
function fn(int $x) { $c = new C;
$c->i = 1;
if ($x) { $a = [1, 2, 3]; } else { $a = [3, 2, 1]; }
return $a[$c-i];
$c->i++;
return $x; }
до вот такой:
function fn(int $x) { return 2;
}
function fn(int $x) {
$c = new C;
$c->i = 1;
if ($x) {
$a = [1, 2, 3];
} else {
$a = [3, 2, 1];
}
return $a[$c-i];
$c->i++;
return $x;
}
Так вот, как объект может использоваться в качестве индекса массива? Т.е. почему $a[$c-i] возвращает 2. А $a[$c]возвращает NULL. Это вообще как так?
sudo cast no-such-file
P.S. Взято отсюда https://habrahabr.ru/company/zfort/blog/339630/