Re: Re: 8.1 / Exception / Property Type / Backwards compatbility
| From: | Ben Ramsey | Date: | Thu, 26 Aug 2021 14:53:54 +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-115860@lists.php.net to get a copy of this message | ||
Dan Ackroyd wrote on 8/26/21 09:43:
> 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.
>
> cheers
> Dan
> Ack
>
It's interesting to note that
Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc
$line and $file both behave this way
in PHP 8.1, but $code and $message do not.
class Foo extends Exception
{
protected $code = 100;
protected $message = 'Hello';
protected $line = 45;
protected $file = '/path/to/file.php';
}
Cheers,
Ben
Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc