Re: Re: 8.1 / Exception / Property Type / Backwards compatbility

From: Date: Thu, 26 Aug 2021 14:57:11 +0000
Subject: Re: Re: 8.1 / Exception / Property Type / Backwards compatbility
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-115861@lists.php.net to get a copy of this message
On Thu, Aug 26, 2021 at 4:43 PM Dan Ackroyd <Danack@basereality.com> wrote: > On Thu, 26 Aug 2021 at 12:42, Björn Larsson via internals > <internals@lists.php.net> wrote: > > > > Den 2021-08-10 kl. 11:55, skrev Philip Hofstetter: > > > The following valid <= PHP 8.0 code that intends to make the $line > property > > > public is a fatal error in 8.1 > .... > > > > > > For method return types, we have #[ReturnTypeWillChange], but for > property > > > types 🤷‍♀️ > > > Hi, > > > > Has this been adressed / solved in some way and does it needs > > to be fixed? > > My understanding is that the two scenarios are not the same and that > there isn't much enthusiasm for 'fixing' it. > > For return types, the #[ReturnTypeWillChange] annotation is a > temporary work-around, and one that would be used by a lot of people. > It would only be used by a library until that library drops support > for older versions of PHP. > > For the exception case, the way that (for legacy reasons) PHP supports > having a public property in a child class that "overwrites" (mostly) > the protected property in the parent class, is a pretty hinkey thing > to do, and so this is likely to only affect a small number of people. > It's not obvious to me how long a bridging annotation would need to > hang around for, and it's really not obvious what the exact details of > how it would work would be. > > I'd suggest using a getter method, which would work on all relevant > versions. > Right. I at least do not plan to address this issue. If you take a protected property and publicly re-export it, then any compatibility issues are on you. If you need to keep doing this for API stability reasons, then the way to do it would be a conditional class declaration. Or to keep the scope smaller, you can conditionally declare a trait with just the property and then use it inside a larger class. Regards, Nikita

« previous php.internals (#115861) next »