Parsing and execution are now two completely separated steps, no
execution of a files code will happen until the complete file and
everything it requires has completely and successfully been
parsed.
One of the new requirements introduced with this split is that
required and included files now have to be syntactically
complete. You can no longer spread the different controlling parts
of a control structure across file boundaries. That is you cannot
start a for or while loop,
an if statement or a switch
block in one file and have the end of loop,
else, endif,
case or break statements in
a different file.
It still perfectly legal to include additional code within loops
or other control structures, only the controlling keywords and
corresponding curly braces {...} have to be
within the same compile unit (file or eval()ed
string).
This should not harm too much as spreading code like this should be
considered as very bad style anyway.
Another thing no longer possible, though rarely seen in PHP 3
code is returning values from a required file. Returning a value
from an included file is still possible.