Ответ 1
Это побочный эффект и упоминается здесь в предложении: http://php.markmail.org/thread/yiujwve6zdw37tpv
Функция - это скорость/оптимизация смещений строк.
Привет,
Недавно я заметил, что чтение смещение строки выполняется в двух шаги. Сначала специальный string_offset Вариант временного_переменной созданный в zend_fetch_dimension_address_read() и тогда истинное значение строки созданный в _get_zval_ptr_var_string_offset().
Я думаю, мы можем создать настоящую строку в первую очередь. Это составляет 50% ускорение чтения строк и позволяет устранить некоторые проверок и условных бранчей в VM.
Патч прилагается (не забудьте регенерировать zend_vm_execute.h для тестирования Это). Однако он меняет поведение в один фиктивный случай. Следующий код сейчас будет испускать "b" (в настоящее время он генерирует фатальная ошибка - не может использовать строку смещение в виде массива).
$str = "abs"; var_dump($str[1][0]);
Я думаю, что это не проблема. "Б" имеет смысл, потому что "abs" [1] → "b" и "b" [0] → "b".
Я собираюсь зафиксировать патч в случае без возражений.
Спасибо. Дмитрий.