diff options
Diffstat (limited to 'ext/reflection')
| -rw-r--r-- | ext/reflection/php_reflection.c | 5 | ||||
| -rw-r--r-- | ext/reflection/tests/default_value_internal_userland_arginfo.phpt | 16 |
2 files changed, 20 insertions, 1 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index a24d72c747..016851e9e5 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -667,7 +667,10 @@ static void _parameter_string(smart_str *str, zend_function *fptr, struct _zend_ if (!required) { if (fptr->type == ZEND_INTERNAL_FUNCTION) { smart_str_appends(str, " = "); - if (((zend_internal_arg_info*)arg_info)->default_value) { + /* TODO: We don't have a way to fetch the default value for an internal function + * with userland arg info. */ + if (has_internal_arg_info(fptr) + && ((zend_internal_arg_info*)arg_info)->default_value) { smart_str_appends(str, ((zend_internal_arg_info*)arg_info)->default_value); } else { smart_str_appends(str, "<default>"); diff --git a/ext/reflection/tests/default_value_internal_userland_arginfo.phpt b/ext/reflection/tests/default_value_internal_userland_arginfo.phpt new file mode 100644 index 0000000000..d2b0589cd1 --- /dev/null +++ b/ext/reflection/tests/default_value_internal_userland_arginfo.phpt @@ -0,0 +1,16 @@ +--TEST-- +Fetching default value of an internal trampoline function with userland arginfo +--FILE-- +<?php +$closure = function ($b = 0) {}; +$ro = new ReflectionObject($closure); +$rm = $ro->getMethod('__invoke'); +echo $rm, "\n"; +?> +--EXPECT-- +Method [ <internal> public method __invoke ] { + + - Parameters [1] { + Parameter #0 [ <optional> $b = <default> ] + } +} |
