Я пытаюсь понять, как оператор foreach интерпретируется PHP. Это привело меня к использованию gdb
во время выполнения фиктивного сценария foreach.
Я заканчиваю в zend_compile.c, в zend_compile_foreach()
функция. Я вижу вызов макроса ZEND_FE_FETCH_R, который перемещает внутренний указатель массива / объекта, на котором мы зациклились.
Есть несколько вещей, которые я не понимаю:
zend_compile_foreach
контекстzend_compile_stmt
(и поэтому zend_compile_foreach
) чтобы итерация произошла? Так код скомпилирован N раз? N — количество элементов в массиве / объектеЗадача ещё не решена.
Других решений пока нет …