Re: [RFC] Deprecate dynamic properties
| From: | Denis Ryabov | Date: | Wed, 25 Aug 2021 10:52:20 +0000 |
| Subject: | Re: [RFC] Deprecate dynamic properties | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-115803@lists.php.net to get a copy of this message | ||
On 25.08.2021 13:02, Nikita Popov wrote:
Hi internals, I'd like to propose the deprecation of "dynamic properties", that is properties that have not been declared in the class (stdClass and __get/__set excluded, of course): https://wiki.php.net/rfc/deprecate_dynamic_properties This has been discussed in various forms in the past, e.g. in https://wiki.php.net/rfc/locked-classes as a class modifier and https://wiki.php.net/rfc/namespace_scoped_declares / https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-language-evolution.md as a declare directive. This RFC takes the more direct route of deprecating this functionality entirely. I expect that this will have relatively little impact on modern code (e.g. in Symfony I could fix the vast majority of deprecation warnings with a three-line diff), but may have a big impact on legacy code that doesn't declare properties at all. Regards, NikitaI use dynamical properties in a legacy code for lazy object creation in the dependency container (with properties declared using @property phpDoc comment, so that PhpStorm IDE supports them). But in my case it's not a problem to refactor that code. I'd suggest to consider "use stdClassTrait" (the name is just for example) as an alternative to "extends stdClass" and "implements stdClassInterface", because 1) It allows to further implement __get/__set in that trait, and 2) It's possible to don't require base abstract class to extend stdClass when dynamical properties are used in a child class only.