since the interpreter and executor core have been separated from the main php package a second api defining macros and function sets has evolved the zend api as the zend api now handles quite a few of the responsibilities that previously belonged to php a lot of php functions have been reduced to macros aliasing to calls into the zend api the recommended practice is to use the zend api wherever possible as the old api is only preserved for compatibility reasons for example the types zval and pval are identical zval is zends definition pval is phps definition actually pval is an alias for zval now as the macro internal _ function _ parameters is a zend macro the above declaration contains zval when writing code you should always use zval to conform to the new zend api 