diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 5dddd05cea77d..79b365bdeeccd 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -2488,6 +2488,34 @@ ZEND_METHOD(reflection_parameter, getClass) } /* }}} */ +/* {{{ proto public string ReflectionParameter::getClassName() + Returns this parameters's class name or null if this there is none */ +ZEND_METHOD(reflection_parameter, getClassName) +{ + reflection_object *intern; + parameter_reference *param; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + GET_REFLECTION_OBJECT_PTR(param); + + if (param->arg_info->class_name) { + const char *class_name; + size_t class_name_len; + + if (param->fptr->type == ZEND_INTERNAL_FUNCTION) { + class_name = ((zend_internal_arg_info*)param->arg_info)->class_name; + class_name_len = strlen(class_name); + + RETURN_STRINGL(class_name, class_name_len); + } else { + ZVAL_STR_COPY(return_value, param->arg_info->class_name); + } + } +} +/* }}} */ + /* {{{ proto public bool ReflectionParameter::isArray() Returns whether parameter MUST be an array */ ZEND_METHOD(reflection_parameter, isArray) @@ -6075,6 +6103,7 @@ static const zend_function_entry reflection_parameter_functions[] = { ZEND_ME(reflection_parameter, getDeclaringFunction, arginfo_reflection__void, 0) ZEND_ME(reflection_parameter, getDeclaringClass, arginfo_reflection__void, 0) ZEND_ME(reflection_parameter, getClass, arginfo_reflection__void, 0) + ZEND_ME(reflection_parameter, getClassName, arginfo_reflection__void, 0) ZEND_ME(reflection_parameter, isArray, arginfo_reflection__void, 0) ZEND_ME(reflection_parameter, isCallable, arginfo_reflection__void, 0) ZEND_ME(reflection_parameter, allowsNull, arginfo_reflection__void, 0) diff --git a/ext/reflection/tests/ReflectionParameter_getClassName.phpt b/ext/reflection/tests/ReflectionParameter_getClassName.phpt new file mode 100644 index 0000000000000..e0cac3f2933b7 --- /dev/null +++ b/ext/reflection/tests/ReflectionParameter_getClassName.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test ReflectionParameter::getClassName() usage. +--FILE-- +getMethod("bar"); +$params = $method->getParameters(); +var_dump($params[0]->getClassName()); +var_dump($params[1]->getClassName()); +var_dump($params[2]->getClassName()); +var_dump($params[3]->getClassName()); + +$method = $class->getMethod("waldo"); +$params = $method->getParameters(); +var_dump($params[0]->getClassName()); +var_dump($params[1]->getClassName()); + + +--EXPECT-- +string(3) "Qux" +NULL +string(7) "Bar\Baz" +string(7) "Bar\Quz" +NULL +NULL