Внутренние изменения PHP
  
  
   - 
    
     Расширения больше не могут переопределять
     zend_execute(), вместо этого они
     должны переопределять zend_execute_ex().
     EG(current_execute_data) уже 
     инициализированна в zend_execute_ex(), 
     поэтому, для совместимости расширений, возможно,
     придется использовать EG(current_execute_data)->prev_execute_data.
    
   
- 
    
     Удалены EG(arg_types_stack),
     EX(fbc), EX(called_scope) 
     и EX(current_object).
    
   
- 
    
     Добавлен op_array->nested_calls,
     который вычисляется в момент компиляции.
    
   
- 
    
     Добавлен EX(call_slots), являющийся 
     массивом для хранения информации о синтаксически
     вложенных вызовах (т.е. foo(bar())) и 
     размещающийся вместе с execute_data.
    
   
- 
    
     Добавлен EX(call), являющийся 
     указателем на вызываемую функцию, и являющийся 
     элементом EX(call_slots).
    
   
- 
    
     Байткоды
     INIT_METHOD_CALL,
     ZEND_INIT_STATIC_METHOD_CALL,
     ZEND_INIT_FCALL_BY_NAME
     и
     ZEND_INIT_NS_FCALL_BY_NAME
     используют result.num как индекс в
     EX(call_slots).
    
   
- 
    
     Байткод ZEND_NEW использует
     extended_value как индекс в
     EX(call_slots).
    
   
- 
    
     Байткоды ZEND_DO_FCALL
     и
     ZEND_DO_FCALL_BY_NAME
     используют op2.num как индекс в
     EX(call_slots).
    
   
- 
    
     Добавлен op_array->used_stack, 
     вычисляемый в момент компиляции; which is calculated at
     compile time; соответствующее место под стек
     выделяется совместно с execute_data. В
     результате, байткоды ZEND_SEND* и ZEND_DO_FCALL*
     больше не требуют проверки на переполнение стека.
    
   
- 
    
     Удалено поле execute_data->Ts. 
     Временные переменные VM всегда размещаются
     сразу перед структурой execute_data,
     и теперь более предпочтительно обращаться к ним по
     смещению от базового указателя 
     execute_data вместо того, чтоб 
     использовать execute_data->Ts.  
     Компилятор хранит новые смещения в 
     op_array->opcodes[*].op?.num.  
     Макросы EX_TMP_VAR() и
     EX_TMP_VAR_NUM()
     могут быть использованы для доступа к временным
     переменным по смещению или номеру. Вы можете
     преобразовать номер в смещение используя
     EX_TMP_VAR_NUM(0, num) или
     смещение в номер используя
     (EX_TMP_VAR_NUM(0,0)-EX_TMP_VAR(0,offset)).
    
   
- 
    
     Удалено поле execute_data->CVs. 
     Скомпилированные переменные VM всегда размещаются
     сразу после структуры execute_data, и
     получать к ним доступ следует по смещению от базового 
     указателя execute_data вместо того,
     чтобы использовать execute_data->CVs.
     Вы можете использовать макрос
     EX_CV_NUM() для доступа к
     скомпилированным переменным по номеру.