Hi Christoph and Rowan (your replies kind of overlap),

On Thu, Apr 23, 2020 at 12:21 PM Christoph M. Becker <cmbecke...@gmx.de> wrote:
>
> On 23.04.2020 at 11:26, Guilliam Xavier wrote:
>
> > On Wed, Apr 22, 2020 at 11:10 PM Barney Laurance <bar...@redmagic.org.uk> 
> > wrote:
> >
> >> Taking a random example, arguments to str_replace documented as mixed
> >> accept string|array and not anything else.
> >
> > Indeed, 
> > <https://www.php.net/manual/en/language.pseudo-types.php#language.types.mixed>
> > currently says that, in the PHP documentation, "`mixed` indicates that
> > a parameter may accept multiple (but not necessarily all) types", and
> > gives two examples:
> > <https://www.php.net/manual/en/function.gettype.php> is accurate, but
> > <https://www.php.net/manual/en/function.str-replace.php> IMO should
> > just use `string|array` rather than `mixed` (that's already the case
> > in 
> > <https://github.com/php/php-src/blob/master/ext/standard/basic_functions.stub.php#L649-L655>).
>
> Besides that PhD does not yet properly support union types[1], it's not
> quite as simple.  array|string would cause failure in strict mode if,
> for instance, an int is passed; however, str_replace() has no issues
> with this[2].  This is the reason why the stub file declares the types
> of $search and $replace only in the doc block comment.
>
> [1] <https://github.com/php/phd/pull/25>
> [2] <https://3v4l.org/R7Iac>

Thanks for the clarification (and your PRs!).
I guess internal functions can be "fuzzy" :/

On Thu, Apr 23, 2020 at 12:33 PM Rowan Tommins <rowan.coll...@gmail.com> wrote:
>
> > On Wed, Apr 22, 2020 at 11:10 PM Barney Laurance <bar...@redmagic.org.uk>
> wrote ...
>
> I don't seem to have this message, and can't find it in any archives; was
> it sent off-list by mistake?

I don't know why Barney's email didn't make it to the list...
In my box, it seems to have correct headers, notably:

    Subject: Re: Re: [PHP-DEV] [RFC] Mixed type
    To: Guilliam Xavier <guilliam.xav...@gmail.com>, "Côme Chilliet"
<come.chill...@fusiondirectory.org>
    Cc: internals@lists.php.net
    From: Barney Laurance <bar...@redmagic.org.uk>
    Message-ID: <663b9713-ad05-47de-3efe-9343cc609...@redmagic.org.uk>
    In-Reply-To:
<CAC5V6giDeRAFet5K+=+q9wkykjuwsqdzegutuckwtrvuz88...@mail.gmail.com>

> On Thu, 23 Apr 2020 at 10:26, Guilliam Xavier <guilliam.xav...@gmail.com>
> wrote:
>
> > I'd rather have the docs "fixed" (but I suspect `str_replace` is not
> > the only place where `mixed` is used in an "approximate" fashion).
>
> Don't forget how recent support for union types in PHP itself is; while the
> manual could have come up with a richer notation, the invention of "mixed"
> is itself simply a convenience to fit the DocBook template. A change to
> that convention would need to be discussed with the editors of the manual
> (including nuances like "string|bool" vs "string|false", and edge cases
> where null is a rare error return), so calling any use of mixed right now
> "wrong" is overstating the case.

(Note that I didn't use that word ;) and surrounded "fixed" with
quotes, but maybe should have said "improved" or "clarified".)
Actually there's one precedent of union-like notation in the manual:
`array|object`, but admittedly special-cased
(https://www.php.net/manual/en/language.pseudo-types.php#language.types.array-object),
and apparently hardly used (I found
https://www.php.net/manual/en/mongodb-driver-bulkwrite.update.php as
one instance). And you make a valid point about convention change.

> It turns out DocBook itself didn't actually have a notation for union types
> until Richard Quadling asked for it for future use in the PHP manual; it's
> been accepted but would require tooling updates to actually make use of.
> See https://news-web.php.net/php.doc/969386777 and
> https://github.com/docbook/docbook/issues/91

Interesting history, thanks.

> All of which is to say, I wouldn't use the conventions used in the manual
> as any kind of guide to type system design. The best we can say is that
> there's existing usage of "mixed" in the PHP manual and in docblocks
> understood by many tools, so to avoid confusion, the new pseudo-type should
> either behave roughly in line with that usage, or have a new name

I concur (but I can't think of a different definition that would work
with LSP, and this name is already soft-reserved waiting to be used).

So, do you agree that the RFC is fine as is?

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to