On 3/24/25 13:33, Daniel Scherzer wrote:
> Hi internals,
>
> I'd like to start the discussion for a new RFC about allowing final
> promoted properties. You can see some preliminary discussion at <
> https://externals.io/message/126475>, but this is now an official
> RFC.
>
> * RFC: https://wiki.php.net/rfc/final_promotion
> * Implementation: https://github.com/php/php-src/pull/17861
>
> --Daniel
>
From the RFC:
> Since properties declared as `final` do not need an explicit
> visibility set (defaulting to public), no visibility is required in
> the promotion if `final` is used, though visibility (including
> asymmetric visibility) and other features (like property hooks) can
> be used and combined with `final`.
My first thought was that it feels weird to define a promoted property
without a visibility modifier, but I didn't realize that this is valid
in PHP 8.4:
```
class Foo
{
final string $foo = 'This is a foo';
}
var_dump(new Foo()->foo);
```
So, if that's valid, then I don't have any objections following the same
pattern with promoted properties.
I find it interesting that you can still declare a class property with
the `var` keyword, but you can't use `final` with `var`, and you can't
use `var` to promote properties. That's probably for the best. :-)
Cheers,
Ben