On Wed, Aug 25, 2021 at 12:02 PM Nikita Popov <nikita....@gmail.com> 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
>

Based on the received feedback, I've updated the RFC to instead provide an
#[AllowDynamicProperties] attribute as a way to opt-in to the use of
dynamic properties. As previously discussed, this won't allow us to
completely remove dynamic properties from the language model anymore, but
it will make the upgrade path smoother by avoiding multiple inheritance
issues. Especially given recent feedback on backwards-incompatible changes,
I think it's prudent to go with the more conservative approach.

Regards,
Nikita

Reply via email to