>
> I totally agree with this: there must be a way to work around the keyword -
> either via reflection or another means.

Via Reflection, it could be a new method `->setWritable(true)` (next to
> `->setAccessible(true)`).
>

I'm OK to support working around the keyword via reflection. Since my
implementation uses a property flag to determine if a property is writable,
and the flag is flipped after writing, the ->setWritable(true) wouldn't
work. But
I can imagine adding a ->setUninitialized() method, or adding a third
parameter to ->setValue() which would affect whether the property flag
should be
first reset or not. Adding a separate ->setValue() method for this purpose
is also
possible, but I couldn't find a good name for that yet. What do you think?


> Another way, which is my current preference, would be to have visibility be
> taken into consideration when using the keyword:
>

To be honest, I don't agree with this idea. It is rather a simpler property
accessor
variant with which one can define separate - but predefined - visibility
rules for
reading and writing.

Furthermore, I think it's worth to protect people from their own mistakes.
I know
for sure that at least I'd need those safeguards. :) But if we are talking
about
unintended changes coming from outside scopes, and if we only consider
"legal" use-cases, private and protected properties are already pretty much
safe.
However, if we also consider possible changes coming from an inside scope,
and other, "illegal" use-cases, we currently don't have any protection. And
not
even property accessors or your idea could help here.

Given, immutability became mainstream via PSR-7 at least, I think it would
be
beneficial to add first-class support for this principle. I remember that
one of the
criticisms against the implementation of PSR-7 was that immutability is not
even
possible to achieve in PHP (apart from the fact that PSR-7 uses a mutable
resource for storing the body). Now, we could solve the first problem, but
that
requires us to stay with the proposed implementation of the RFC.

Regards,
Máté

Reply via email to