zend_parse_method_parameters 必须第一个格式字符串是 O
this_ptr作为返回值 返回(赋值给obj_ptr) 且必须是 mchessian_service_ce_ptr类型实例
if (FAILURE == zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, p_this, "O|o", &obj_ptr, mcphessian_service_ce_ptr, &obj2_ptr)) {
zend_error(E_WARNING, "parse parameters error.");
//return;
}
ZEND_API int zend_parse_method_parameters(int num_args TSRMLS_DC, zval *this_ptr, const char *type_spec, ...)
{
va_list va;
int retval;
const char *p = type_spec;
zval **object;
zend_class_entry *ce;
if (!this_ptr) {
RETURN_IF_ZERO_ARGS(num_args, p, 0);
va_start(va, type_spec);
retval = zend_parse_va_args(num_args, type_spec, &va, 0 TSRMLS_CC);
va_end(va);
} else {
p++;
RETURN_IF_ZERO_ARGS(num_args, p, 0);
va_start(va, type_spec);
object = va_arg(va, zval **);
ce = va_arg(va, zend_class_entry *);
*object = this_ptr;
if (ce && !instanceof_function(Z_OBJCE_P(this_ptr), ce TSRMLS_CC)) {
zend_error(E_CORE_ERROR, "%s::%s() must be derived from %s::%s",
ce->name, get_active_function_name(TSRMLS_C), Z_OBJCE_P(this_ptr)->name, get_active_function_name(TSRMLS_C));
}
retval = zend_parse_va_args(num_args, p, &va, 0 TSRMLS_CC);
va_end(va);
}
return retval;