Hi Marco,

Sorry for the very late reply!

As explained in
> https://github.com/lcobucci/jwt/pull/979#discussion_r1025280053, a
> consumer relying on a `readonly`
>
implementation of a class probably also expects replacement implementations
> as read-only.
> I am aware that we lack the `readonly` marker at interface level (would be
> really neat), but the practical example is as follows:
>

Regarding readonly interfaces: it would be a good idea given properties
were be able to be declared in interfaces. Then readonly
interfaces could adopt the same semantics as readonly classes have, so that
all *declared* properties become readonly.

Regarding the LSP violation: your example is about immutability (as the
name of the classes also suggest), but the readonly
keyword doesn't guarantee immutability. This is basically what Nicolas
answered not long ago to Larry:
https://externals.io/message/118554#118604

readonly class FancyPerson extends Person {
>     private readonly stdClass $middle;


>     public function setMiddle(string $mid) {
>         $this->middle ??= new stdClass;
>         $this->middle->name = $mid;
>     }


>     public function fullName() {
>         return "$this->first $this-middle $this->last";
>     }
> }


We proposed this change because it wouldn't break anything that's already
not "broken".

Regards:
Máté

Reply via email to