Re: [RFC] Asymmetric Visibility, v2

From: Date: Mon, 03 Jun 2024 07:54:07 +0000
Subject: Re: [RFC] Asymmetric Visibility, v2
References: 1 2 3 4 5 6  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On Fri, May 31, 2024 at 7:13 PM Larry Garfield <[email protected]>
wrote:

>
> So we feel the best way forward is to make the following changes:
>
> * private(set) implicitly means "final".  (You can declare it explicitly
> if you want, but it isn't necessary.)
> * Make readonly incompatible with aviz again.
>
> Thoughts?
>

I think making properties final when using private(set) is a good
solution to this.

I don't think readonly needs to be incompatible with aviz. We can have
readonly act as private(set) but not final by default.
But you can define it as private(set) readonly, and in this case it will
be final, practically the same as final readonly.
It would go like this:
- private(set) -> final, private(set)
- final private(set) -> final, private(set)
- readonly -> write-once, private(set)
- final readonly -> final, write-once, private(set)
- private(set) readonly -> final, write-once, private(set)
- protected(set) readonly -> write-once, protected(set)
- public(set) readonly -> write-once, public(set)


>
> Also, Alexandru noted earlier that final properties don't seem to be
> supported in constructor promotion.  That's an oversight from the hooks
> implementation, not a design choice, so Ilija will just fix that as part of
> the hooks PR before it gets fully merged.
>

Maybe we need to have some discussion/considerations about allowing new
modifiers on constructor promoted properties parameters.
Right now there is no final modifier for parameters, but this means we
might not be able to allow them in the future.
In other languages (Java), it makes the parameter variable a constant (not
reassignable).

So this decision might have implications so that when we decide to make
variables or parameters not reassignable, we will not be able to use
"final" as a keyword.
Not saying there is a problem, just that we need to be aware of it, as
probably final is not a very good choice, and const or
readonly are
probably better options.

Alex


Thread (57 messages)

« previous php.internals (#123488) next »