From: Nikita Popov Date: Mon, 15 Feb 2021 11:08:15 +0000 (+0100) Subject: Used typed properties for reflection $name and $class X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ccf6309176d8bcba0245da16a4ab497ece24719;p=php Used typed properties for reflection $name and $class These are read-only properties, and Reflection makes sure to assign only strings. --- diff --git a/ext/reflection/php_reflection.stub.php b/ext/reflection/php_reflection.stub.php index 8a67c43a99..9287ae7e9c 100644 --- a/ext/reflection/php_reflection.stub.php +++ b/ext/reflection/php_reflection.stub.php @@ -18,8 +18,7 @@ interface Reflector extends Stringable abstract class ReflectionFunctionAbstract implements Reflector { - /** @var string */ - public $name = ""; + public string $name; /** @implementation-alias ReflectionClass::__clone */ final private function __clone(): void {} @@ -150,8 +149,7 @@ final class ReflectionGenerator class ReflectionMethod extends ReflectionFunctionAbstract { - /** @var string */ - public $class = ""; + public string $class; public function __construct(object|string $objectOrMethod, ?string $method = null) {} @@ -205,8 +203,7 @@ class ReflectionMethod extends ReflectionFunctionAbstract class ReflectionClass implements Reflector { - /** @var string */ - public $name = ""; + public string $name; final private function __clone(): void {} @@ -378,11 +375,8 @@ class ReflectionObject extends ReflectionClass class ReflectionProperty implements Reflector { - /** @var string */ - public $name = ""; - - /** @var string */ - public $class = ""; + public string $name; + public string $class; /** @implementation-alias ReflectionClass::__clone */ final private function __clone(): void {} @@ -449,11 +443,8 @@ class ReflectionProperty implements Reflector class ReflectionClassConstant implements Reflector { - /** @var string */ - public $name = ""; - - /** @var string */ - public $class = ""; + public string $name; + public string $class; /** @implementation-alias ReflectionClass::__clone */ final private function __clone(): void {} @@ -492,8 +483,7 @@ class ReflectionClassConstant implements Reflector class ReflectionParameter implements Reflector { - /** @var string */ - public $name = ""; + public string $name; /** @implementation-alias ReflectionClass::__clone */ final private function __clone(): void {} @@ -599,8 +589,7 @@ class ReflectionUnionType extends ReflectionType class ReflectionExtension implements Reflector { - /** @var string */ - public $name = ""; + public string $name; /** @implementation-alias ReflectionClass::__clone */ final private function __clone(): void {} @@ -645,8 +634,7 @@ class ReflectionExtension implements Reflector class ReflectionZendExtension implements Reflector { - /** @var string */ - public $name = ""; + public string $name; /** @implementation-alias ReflectionClass::__clone */ final private function __clone(): void {} diff --git a/ext/reflection/php_reflection_arginfo.h b/ext/reflection/php_reflection_arginfo.h index ebc488a138..afc01cb56e 100644 --- a/ext/reflection/php_reflection_arginfo.h +++ b/ext/reflection/php_reflection_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 5c4f082e36118b7a955cc1d6b1fda385dd7c0bc0 */ + * Stub hash: fb4e29d088862cc76d22c9902c79c86dbfa7ac95 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_Reflection_getModifierNames, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, modifiers, IS_LONG, 0) @@ -1036,9 +1036,9 @@ zend_class_entry *register_class_ReflectionFunctionAbstract(zend_class_entry *cl zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); return class_entry; @@ -1073,9 +1073,9 @@ zend_class_entry *register_class_ReflectionMethod(zend_class_entry *class_entry_ class_entry = zend_register_internal_class_ex(&ce, class_entry_ReflectionFunctionAbstract); zval property_class_default_value; - ZVAL_EMPTY_STRING(&property_class_default_value); + ZVAL_UNDEF(&property_class_default_value); zend_string *property_class_name = zend_string_init("class", sizeof("class") - 1, 1); - zend_declare_property_ex(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_class_name); return class_entry; @@ -1090,9 +1090,9 @@ zend_class_entry *register_class_ReflectionClass(zend_class_entry *class_entry_R zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); return class_entry; @@ -1117,15 +1117,15 @@ zend_class_entry *register_class_ReflectionProperty(zend_class_entry *class_entr zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); zval property_class_default_value; - ZVAL_EMPTY_STRING(&property_class_default_value); + ZVAL_UNDEF(&property_class_default_value); zend_string *property_class_name = zend_string_init("class", sizeof("class") - 1, 1); - zend_declare_property_ex(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_class_name); return class_entry; @@ -1140,15 +1140,15 @@ zend_class_entry *register_class_ReflectionClassConstant(zend_class_entry *class zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); zval property_class_default_value; - ZVAL_EMPTY_STRING(&property_class_default_value); + ZVAL_UNDEF(&property_class_default_value); zend_string *property_class_name = zend_string_init("class", sizeof("class") - 1, 1); - zend_declare_property_ex(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_class_name, &property_class_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_class_name); return class_entry; @@ -1163,9 +1163,9 @@ zend_class_entry *register_class_ReflectionParameter(zend_class_entry *class_ent zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); return class_entry; @@ -1212,9 +1212,9 @@ zend_class_entry *register_class_ReflectionExtension(zend_class_entry *class_ent zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); return class_entry; @@ -1229,9 +1229,9 @@ zend_class_entry *register_class_ReflectionZendExtension(zend_class_entry *class zend_class_implements(class_entry, 1, class_entry_Reflector); zval property_name_default_value; - ZVAL_EMPTY_STRING(&property_name_default_value); + ZVAL_UNDEF(&property_name_default_value); zend_string *property_name_name = zend_string_init("name", sizeof("name") - 1, 1); - zend_declare_property_ex(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL); + zend_declare_typed_property(class_entry, property_name_name, &property_name_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); zend_string_release(property_name_name); return class_entry; diff --git a/ext/reflection/tests/ReflectionClass_toString_001.phpt b/ext/reflection/tests/ReflectionClass_toString_001.phpt index 86d6720fe6..e218e8b470 100644 --- a/ext/reflection/tests/ReflectionClass_toString_001.phpt +++ b/ext/reflection/tests/ReflectionClass_toString_001.phpt @@ -24,7 +24,7 @@ Class [ class ReflectionClass implements Reflector, String } - Properties [1] { - Property [ public $name = '' ] + Property [ public string $name ] } - Methods [54] {