Re: Re: [RFC] [PRE-VOTE] Union types
| From: | Fleshgrinder | Date: | Thu, 02 Jun 2016 17:52:32 +0000 |
| Subject: | Re: Re: [RFC] [PRE-VOTE] Union types | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-93726@lists.php.net to get a copy of this message | ||
On 6/2/2016 7:37 PM, Bob Weinand wrote:
> Hey,
>
> I think this is more of a presentation problem.
> As you say, there's not much a better way to do that.
>
> It's basically our weak casting rules, just applied to the most lossless type available.
> It's out weak casting rules which are so complex; the RFCs combination is not particularly
> complex.
> It needs to cover everything, but it's particularly important for the trivial cases to be
> handled here. Would be quite WTF if you could not pass a float to something accepting int (as one of
> its types).
>
> I'd welcome every suggestion to make the rules look less scary, because they actually
> aren't.
>
> Bob
>
Don't you think this matrix would be a better presentation and simpler?
|--------|--------|--------|--------|
| type | #1 | #2 | #3 |
|--------|--------|--------|--------|
| bool | string | int | |
| int | string | float | bool |
| float | string | int | bool |
| object | string | | |
| string | float | int | bool |
|--------|--------|--------|--------|
Everything else is a TypeError.
Note that I try string first all the time. Simply because it makes no
difference for PHP afterwards, e.g.:
function f(string|int $a) {
if ($a == 1) echo 'foo';
}
f(true); // true ~> '1' ~> 1 = foo
Even if the change I applied is not intelligent and is not a good idea
(haven't thought about it deeply), the presentation as a table should
help a lot.
--
Richard "Fleshgrinder" Fussenegger
Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc
Attachment: [application/pgp-signature] OpenPGP digital signature signature.asc