[PHP-DEV] [RFC] [Discussion] Final promoted properties

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.

–Daniel

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 < Constructor property promotion for final properties - Externals, but this is now an official
RFC.

* RFC: PHP: rfc:final_promotion * Implementation: [RFC] Final Property Promotion by DanielEScherzer · Pull Request #17861 · php/php-src · GitHub

--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. :slight_smile:

Cheers,
Ben

Hi

Am 2025-03-24 19:33, schrieb Daniel Scherzer:

I'd like to start the discussion for a new RFC about allowing final
promoted properties. You can see some preliminary discussion at <
Constructor property promotion for final properties - Externals, but this is now an official RFC.

I'm in favor of supporting all modifiers during promotion, but I don't particularly like the implicit promoting without also specifying the visibility, but given the precedent with `readonly` and hooks [1], it would at least be consistent.

I'll probably abstain from a vote for that reason.

Best regards
Tim Düsterhus

[1] The latter of which unfortunately was not specified in the RFC.

On Mon, Mar 24, 2025 at 11:33 AM Daniel Scherzer <daniel.e.scherzer@gmail.com> 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.

–Daniel

If there is no further discussion I plan to open the vote in a few days.
-Daniel