I'd like to point out some problems with the formal interfaces provided by 
several packages belonging to the PSR standards.

Starting with this example:

[image: screenshot.png]

This inspection failure (in PHP Storm) of course is bunk - and static 
analysis can easily *prove* that it's bunk: since $abs_path is statically 
type-hinted as string, it's a string.

The issue here is the interface declaration:

[image: screenshot.png]

Interfaces (obviously) do not throw exceptions - their implementations do 
that.

The underlying issue I'm trying to highlight here, is that, as a consumer 
of *implementations* of these interfaces, what I'm seeing in the doc-blocks 
of most PSR interfaces and methods isn't documentation for me as a consumer 
- it's documentation for the developers who implemented them.

Here's another worse example from PSR-7's ServerRequestInterface:

[image: screenshot.png]

Reading this, as a consumer, I'm completely side-tracked by confusing and 
misleading details, such as "This method MUST NOT update the related Cookie 
header of the request instance, nor related values in the server params" - 
explicit directions for implementors, of no relevance at them time when 
you're consuming them.

Interfaces shouldn't have language like this - for example, "*MUST return* 
an instance that has the updated cookie values" ought to be "*Returns* an 
instance that has the updated cookie values", and so on.

So I'm highlighting two problems here: frequent misleading or incorrect use 
of doc-blocks, and confusing explanations/specifications as opposed to 
consumer-facing explanations/expectations.

But it sort of comes down to the same thing - we've been treating the 
interfaces as though they *are* the specification, with documentation and 
doc-blocks written for implementors as opposed to consumers.

You don't normally do that in your own interfaces, do you?

Why do we do that in PSRs?

-- 
You received this message because you are subscribed to the Google Groups "PHP 
Framework Interoperability Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to php-fig+unsubscr...@googlegroups.com.
To post to this group, send email to php-fig@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/php-fig/cbf43fce-19e9-4dc3-906c-d53d1972b81a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to