Commit fbd30175115 for php.net
commit fbd30175115a206e95f70c3ddbac16ec6f3b302e
Author: Daniel Scherzer <daniel.e.scherzer@gmail.com>
Date: Wed Apr 15 08:49:37 2026 -0700
GH-21754: sapi/cli: avoid deprecation messages with `--rf` and methods (#21758)
diff --git a/NEWS b/NEWS
index 8c423fe61ce..f3b3e3a6aa3 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,10 @@ PHP NEWS
self::/parent::/static:: callables if the error handler throws). (macoaure)
. Fixed bug GH-21603 (Missing addref for __unset). (ilutov)
+- CLI:
+ . Fixed bug GH-21754 (`--rf` command line option with a method triggers
+ ext/reflection deprecation warnings). (DanielEScherzer)
+
- Curl:
. Add support for brotli and zstd on Windows. (Shivam Mathur)
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
index 9444f3d6253..4b19cf0604c 100644
--- a/sapi/cli/php_cli.c
+++ b/sapi/cli/php_cli.c
@@ -1042,13 +1042,25 @@ static int do_cli(int argc, char **argv) /* {{{ */
}
ZVAL_STRING(&arg, reflection_what);
- object_init_ex(&ref, pce);
memset(&execute_data, 0, sizeof(zend_execute_data));
execute_data.func = (zend_function *) &zend_pass_function;
EG(current_execute_data) = &execute_data;
- zend_call_known_instance_method_with_1_params(
- pce->constructor, Z_OBJ(ref), NULL, &arg);
+ // Avoid deprecation warnings from ReflectionMethod::__construct()
+ // with one argument
+ if (pce == reflection_method_ptr) {
+ zend_function *create_from_method = zend_hash_str_find_ptr(
+ &(pce->function_table),
+ "createfrommethodname",
+ strlen( "createFromMethodName" )
+ );
+ zend_call_known_function(
+ create_from_method, NULL, pce, &ref, 1, &arg, NULL);
+ } else {
+ object_init_ex(&ref, pce);
+ zend_call_known_instance_method_with_1_params(
+ pce->constructor, Z_OBJ(ref), NULL, &arg);
+ }
if (EG(exception)) {
zval rv;
diff --git a/sapi/cli/tests/004.phpt b/sapi/cli/tests/004.phpt
index 83da934c8ff..69dc46b5b90 100644
--- a/sapi/cli/tests/004.phpt
+++ b/sapi/cli/tests/004.phpt
@@ -12,6 +12,9 @@
var_dump(`$php -n --rf unknown`);
var_dump(`$php -n --rf echo`);
var_dump(`$php -n --rf phpinfo`);
+// Regression tests for https://github.com/php/php-src/issues/21754
+var_dump(`$php -n --rf ReflectionMethod::__construct`);
+var_dump(`$php -n --rf ReflectionMethod::missing`);
echo "Done\n";
?>
@@ -28,5 +31,16 @@
- Return [ true ]
}
+"
+string(213) "Method [ <internal:Reflection, ctor> public method __construct ] {
+
+ - Parameters [2] {
+ Parameter #0 [ <required> object|string $objectOrMethod ]
+ Parameter #1 [ <optional> ?string $method = null ]
+ }
+}
+
+"
+string(61) "Exception: Method ReflectionMethod::missing() does not exist
"
Done