On Thu, Mar 12, 2020, at 8:57 AM, Máté Kocsis wrote: > As you might noticed, I've not opened the vote yet. Partly because I was > improving > my implementation as well as the RFC itself (added some words about the > inheritance > implications), but the main reason is that a question arise in the > meanwhile. > > Namely, "write-once" properties could in principle support covariance. That > is, a subclass > would be allowed to tighten the property type that is inherited from the > parent class. > It would be a slight change compared to regular properties that are > invariant. > > All this would be possible because of the quasi-immutable nature of > "write-once" properties: > they are generally expected to be assigned to only once, in the constructor > - which is exempt from > LSP checks. > > There is a gotcha though... In practice, "write-once" properties could be > written from places > other than the constructor. Although there might not be many practical > use-cases for it, > the infamous setter injection is certainly one (as shown at > https://3v4l.org/DQ3To), in which > case property covariance would be a problem. > > That's why I'm curious about some additional input on the matter. Do you > think > covariance of "write-once" properties is worth to have even though there > might be > some edge-cases when it can't be supported perfectly? I'll include this > topic a bit later > in the RFC as well. In the worst case it could be added to the "Future > Scope" section > because - and correct me if I'm wrong - we can also add support for it > later since it would be > a non-breaking change. > > Cheers, > Máté
I'd strongly suggest not messing with that for now. There's a definite can of worms, not all of which we likely know about yet. Plus, as you say, it's easier to add support for that later if we can find all of the worms than to try and put those worms back in the box after they've gotten loose. --Larry Garfield -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php