Hi Derick,

> Would it make sense to have an interface for the set*() methods? Besides
> build(), they all seem to have the same API.
>

I've just answered this to Juris, but TLDR: IMO it is not possible if we go
with the currently suggested behavior.
The set*() method pairs would have completely different validation rules
based on the specification they implement.


> > - Query Parameter Manipulation
>
> I see this adds NoDiscard:
> #[\NoDiscard(message: "as Uri\Rfc3986\Uri::withQueryParams() does not
> modify the object itself")]
>
> But the original methods on the classes don't have these NoDiscards, and
> it doesn't seem that this RFC is suggesting to add them. It should at
> least be consistent.
>

Thanks for noticing these; I wanted to add #[NoDiscard] to Uri/Url wither
methods just before the final PHP 8.5 release,
but it was a bit controversial, so I didn't do it at last. Then I thought
that at least the newly proposed methods could
have it, that's why I included these attributes into this RFC. But now I
realized that I'm not ready to fight for them,
so I've just removed them all from the proposal.


> > - Accessing Path Segments as an Array
>
> Compare:
>
> "especially considering the fact that Uri\Rfc3986\Uri internally stores
> the path as a list of segments."
>
> And:
>
> Uri\Rfc3986\Uri::withPathSegments() … internally concatenate the input
> segments separated by a / character, and then trigger
> Uri\Rfc3986\Uri::withPath() …
>
> Why does it need to do this concattenation, and then call withPath() for
> Rfc3986\Uri then?
>

The path setter of the uriparser library (uriSetPathMmA) takes a string
first,
then reparses it as an URI (setters for the other components work much
simpler),
and finally, does a few other checks/modifications. If everything went well,
the path is stored as a list of segments indeed. That's why concatenating
the
segments is needed, otherwise validation wouldn't work properly.

Cheers,
Máté

Reply via email to