I'm trying to figure out how a foreach statement is interpreted by PHP. That led me to use gdb while executing a dummy foreach script.
I end up in zend_compile.c, in the zend_compile_foreach() function. I see the call to the macro ZEND_FE_FETCH_R that moves the internal pointer of the array/object we loop on.
There are a few things I don't understand :
- How the value is actually returned to the zend_compile_foreachcontext
- Are we nesting calls to zend_compile_stmt(and thereforezend_compile_foreach) to make the iteration happen ? So is the code compiled N times ? N being the number of elements in the array/object
- What is an opline ?? I see that everywhere I look and I don't know about this
 
    