summaryrefslogtreecommitdiff
path: root/ext/reflection
diff options
context:
space:
mode:
Diffstat (limited to 'ext/reflection')
-rw-r--r--ext/reflection/php_reflection.c5
-rw-r--r--ext/reflection/tests/default_value_internal_userland_arginfo.phpt16
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> ]
+ }
+}