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