On Sat, Jun 30, 2018 at 10:17 PM, Sara Golemon <poll...@php.net> wrote:

> On Sat, Jun 30, 2018 at 3:08 PM, Stanislav Malyshev <smalys...@gmail.com>
> wrote:
> >> Together with Michael Moravec, we’d like to announce that we are
> pretending
> >> to open the Mixed Type RFC (https://wiki.php.net/rfc/mixed-typehint)
> next
> >> Monday (02/07) and we’d like to ask you to take a look into the PR on
> >> GitHub (https://github.com/php/php-src/pull/2603) and let us know if
> >> there's something else to do before it.
> >
> > I think this is wrong. This "type" - which is not really a type, of
> > course - does not add anything to the code, by definition - if you take
> > it out, everything would be the same. Things like that belong in the
> > documentation. Moreover, it makes the code harder to read, as the reader
> > should make mental effort to discard this non-type every time it is
> > mentioned, as it does not carry any information.
> >
> I would say that, in a world without union or intersection types, it
> adds to the readability of the code by explicitly saying, "We accept
> more than one type here, and we know we accept more than one type
> here." This is distinct from, "We have no idea what type we accept
> here."  That adds to readability, it doesn't detract.
>
> I preface that with a mention of union/intersection types because that
> seems to be the *actual* problem this RFC is attempting to cope with
> while lacking the tools to do it right.  I'm not super excited about
> this RFC because, as you say, this information could be easily encoded
> into the docblock for the function/method.  Zero impact to the syntax,
> same benefit for the programmer and their readability. (More benefit,
> really, as docblock standards *do* permit union/intersection types.
>

I'm basically with Sara here. Generally the feature has some merit, but I'm
sure that given our current type-system, and in particular the lack of
union types, this feature will be misused to annotate parameters that do
*not* accept completely arbitrary values, but where "mixed" is the best
approximation we have. For that reason I would prefer to defer this
addition until proper union types are supported. In that case mixed would
be a shortcut for the otherwise somewhat unwieldy type of
?(bool|int|float|string|array|object|resource) (modulo the non-existence of
resource...)

Nikita

Reply via email to