Re: [RFC] Deprecate dynamic properties

From: 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, Nikita
I 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.

« previous php.internals (#115803) next »