Hi! > Nowadays (since PHP 5.0) the code was moved from > call_user_function_ex to zend_call_function and just looks like > this: > > ((zend_internal_function *) > EX(function_state).function)->handler(fci->param_count, > *fci->retval_ptr_ptr, fci->retval_ptr_ptr, fci->object_ptr, 1 > TSRMLS_CC);
So in zend_vm_def.h we have: if (!zend_execute_internal) { /* saves one function call if zend_execute_internal is not used */ fbc->internal_function.handler(opline->extended_value, ret->var.ptr, (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? &ret->var.ptr : NULL, EX(object), RETURN_VALUE_USED(opline) TSRMLS_CC); } else { zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC); } But in zend_call_function it goes just: ((zend_internal_function *) EX(function_state).function)->handler(fci->param_count, *fci->retval_ptr_ptr, fci->retval_ptr_ptr, fci->object_ptr, 1 TSRMLS_CC); So looks like the code is not consistent. You can still catch user functions with zend_execute override but not the internal ones. No idea why the difference exists, I'll look through commits and if I find no reason I guess the should be synchronized. -- Stanislav Malyshev, Software Architect SugarCRM: http://www.sugarcrm.com/ (408)454-6900 ext. 227 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php