reflection: Deprecate Reflection*::setAccessible() (#19273)

RFC: https://wiki.php.net/rfc/deprecations_php_8_5#deprecate_reflectionsetaccessible
This commit is contained in:
Tim Düsterhus 2025-08-08 22:24:41 +02:00 committed by GitHub
parent 732069d98b
commit 922c225fbf
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 48 additions and 10 deletions

View file

@ -226,6 +226,7 @@ class ReflectionMethod extends ReflectionFunctionAbstract
public function hasPrototype(): bool {} public function hasPrototype(): bool {}
/** @tentative-return-type */ /** @tentative-return-type */
#[\Deprecated(since: '8.5', message: "as it has no effect")]
public function setAccessible(bool $accessible): void {} public function setAccessible(bool $accessible): void {}
} }
@ -542,6 +543,7 @@ class ReflectionProperty implements Reflector
public function getDocComment(): string|false {} public function getDocComment(): string|false {}
/** @tentative-return-type */ /** @tentative-return-type */
#[\Deprecated(since: '8.5', message: "as it has no effect")]
public function setAccessible(bool $accessible): void {} public function setAccessible(bool $accessible): void {}
/** @tentative-return-type */ /** @tentative-return-type */

View file

@ -1,5 +1,5 @@
/* This is a generated file, edit the .stub.php file instead. /* This is a generated file, edit the .stub.php file instead.
* Stub hash: ef9e7f30a29819489e17a9c100f55696d5d164e0 */ * Stub hash: 0f6ecac0c6c4fb4af140a1be95f6a50c7532dae9 */
ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 1, IS_ARRAY, 0) ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 1, IS_ARRAY, 0)
ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0)
@ -1076,7 +1076,7 @@ static const zend_function_entry class_ReflectionMethod_methods[] = {
ZEND_ME(ReflectionMethod, getDeclaringClass, arginfo_class_ReflectionMethod_getDeclaringClass, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionMethod, getDeclaringClass, arginfo_class_ReflectionMethod_getDeclaringClass, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionMethod, getPrototype, arginfo_class_ReflectionMethod_getPrototype, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionMethod, getPrototype, arginfo_class_ReflectionMethod_getPrototype, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionMethod, hasPrototype, arginfo_class_ReflectionMethod_hasPrototype, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionMethod, hasPrototype, arginfo_class_ReflectionMethod_hasPrototype, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionMethod, setAccessible, arginfo_class_ReflectionMethod_setAccessible, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionMethod, setAccessible, arginfo_class_ReflectionMethod_setAccessible, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
ZEND_FE_END ZEND_FE_END
}; };
@ -1182,7 +1182,7 @@ static const zend_function_entry class_ReflectionProperty_methods[] = {
ZEND_ME(ReflectionProperty, getModifiers, arginfo_class_ReflectionProperty_getModifiers, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, getModifiers, arginfo_class_ReflectionProperty_getModifiers, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionProperty, getDeclaringClass, arginfo_class_ReflectionProperty_getDeclaringClass, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, getDeclaringClass, arginfo_class_ReflectionProperty_getDeclaringClass, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionProperty, getDocComment, arginfo_class_ReflectionProperty_getDocComment, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, getDocComment, arginfo_class_ReflectionProperty_getDocComment, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionProperty, setAccessible, arginfo_class_ReflectionProperty_setAccessible, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, setAccessible, arginfo_class_ReflectionProperty_setAccessible, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
ZEND_ME(ReflectionProperty, getType, arginfo_class_ReflectionProperty_getType, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, getType, arginfo_class_ReflectionProperty_getType, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionProperty, getSettableType, arginfo_class_ReflectionProperty_getSettableType, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, getSettableType, arginfo_class_ReflectionProperty_getSettableType, ZEND_ACC_PUBLIC)
ZEND_ME(ReflectionProperty, hasType, arginfo_class_ReflectionProperty_hasType, ZEND_ACC_PUBLIC) ZEND_ME(ReflectionProperty, hasType, arginfo_class_ReflectionProperty_hasType, ZEND_ACC_PUBLIC)
@ -1493,6 +1493,14 @@ static zend_class_entry *register_class_ReflectionMethod(zend_class_entry *class
ZVAL_UNDEF(&property_class_default_value); ZVAL_UNDEF(&property_class_default_value);
zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
zend_attribute *attribute_Deprecated_func_setaccessible_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "setaccessible", sizeof("setaccessible") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
ZVAL_STR(&attribute_Deprecated_func_setaccessible_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5));
attribute_Deprecated_func_setaccessible_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
zend_string *attribute_Deprecated_func_setaccessible_0_arg1_str = zend_string_init("as it has no effect", strlen("as it has no effect"), 1);
ZVAL_STR(&attribute_Deprecated_func_setaccessible_0->args[1].value, attribute_Deprecated_func_setaccessible_0_arg1_str);
attribute_Deprecated_func_setaccessible_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
return class_entry; return class_entry;
} }
@ -1650,6 +1658,14 @@ static zend_class_entry *register_class_ReflectionProperty(zend_class_entry *cla
ZVAL_UNDEF(&property_class_default_value); ZVAL_UNDEF(&property_class_default_value);
zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_declare_typed_property(class_entry, ZSTR_KNOWN(ZEND_STR_CLASS), &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
zend_attribute *attribute_Deprecated_func_setaccessible_0 = zend_add_function_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "setaccessible", sizeof("setaccessible") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2);
ZVAL_STR(&attribute_Deprecated_func_setaccessible_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_5));
attribute_Deprecated_func_setaccessible_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE);
zend_string *attribute_Deprecated_func_setaccessible_0_arg1_str = zend_string_init("as it has no effect", strlen("as it has no effect"), 1);
ZVAL_STR(&attribute_Deprecated_func_setaccessible_0->args[1].value, attribute_Deprecated_func_setaccessible_0_arg1_str);
attribute_Deprecated_func_setaccessible_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE);
return class_entry; return class_entry;
} }

View file

@ -37,7 +37,7 @@ $protected->invokeArgs(new A, array(NULL));
$protectedStatic->invoke(NULL, NULL); $protectedStatic->invoke(NULL, NULL);
$protectedStatic->invokeArgs(NULL, array(NULL)); $protectedStatic->invokeArgs(NULL, array(NULL));
?> ?>
--EXPECT-- --EXPECTF--
A::aPrivate A::aPrivate
A::aPrivate A::aPrivate
A::aPrivateStatic A::aPrivateStatic
@ -46,6 +46,14 @@ A::aProtected
A::aProtected A::aProtected
A::aProtectedStatic A::aProtectedStatic
A::aProtectedStatic A::aProtectedStatic
Deprecated: Method ReflectionMethod::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionMethod::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionMethod::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionMethod::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
A::aPrivate A::aPrivate
A::aPrivate A::aPrivate
A::aPrivateStatic A::aPrivateStatic

View file

@ -95,6 +95,14 @@ string(1) "e"
string(1) "f" string(1) "f"
string(1) "g" string(1) "g"
string(1) "h" string(1) "h"
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
string(1) "e" string(1) "e"
string(1) "f" string(1) "f"
string(1) "g" string(1) "g"
@ -111,6 +119,12 @@ string(1) "c"
string(1) "e" string(1) "e"
string(1) "f" string(1) "f"
string(1) "g" string(1) "g"
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
Deprecated: Method ReflectionProperty::setAccessible() is deprecated since 8.5, as it has no effect in %s on line %d
string(1) "e" string(1) "e"
string(1) "f" string(1) "f"
string(1) "g" string(1) "g"

View file

@ -22,7 +22,6 @@ $b = new B();
$reflector = new ReflectionClass($b); $reflector = new ReflectionClass($b);
$property = $reflector->getProperty('prop2'); $property = $reflector->getProperty('prop2');
$property->setAccessible(true);
$property->setValue($b, new A()); $property->setValue($b, new A());
var_dump($b); var_dump($b);

View file

@ -47,7 +47,6 @@ try {
} catch (ReflectionException $e) { } catch (ReflectionException $e) {
echo $e->getMessage(), "\n"; echo $e->getMessage(), "\n";
} }
$s->setAccessible(true);
$s->invoke($test, 42); $s->invoke($test, 42);
var_dump($test->prop2); var_dump($test->prop2);
dumpFlags($rp2); dumpFlags($rp2);

View file

@ -19,7 +19,7 @@ class A {
} }
$property = new MyReflectionProperty('A', 'protected'); $property = new MyReflectionProperty('A', 'protected');
$property->setAccessible(true); $property->isStatic();
?> ?>
--EXPECTF-- --EXPECTF--
@ -28,7 +28,7 @@ $property->setAccessible(true);
<!-- init ReflectionProperty::__construct() --> <!-- init ReflectionProperty::__construct() -->
<ReflectionProperty::__construct> <ReflectionProperty::__construct>
</ReflectionProperty::__construct:NULL> </ReflectionProperty::__construct:NULL>
<!-- init ReflectionProperty::setAccessible() --> <!-- init ReflectionProperty::isStatic() -->
<ReflectionProperty::setAccessible> <ReflectionProperty::isStatic>
</ReflectionProperty::setAccessible:NULL> </ReflectionProperty::isStatic:false>
</file '%s'> </file '%s'>