maybe easier to get a majority from voters if defining union types only in
strict mode for 7.1?
Regards
Thomas
Rowan Collins wrote on 03.06.2016 15:40:
> On 03/06/2016 13:30, Bob Weinand wrote:
>>
>> The *weak casting* rules (i.e. what gets converted how and what can be
>> converted to the other type) are not an invention of the proposal.
>>
>> The proposal however defines the specific order.
>>
>> I’ve added a reasoning why not left-to-right now. As this seemed to be
>> asked multiple times.
>>
>> Also, the specific reasoning why I propose that specific order the rules
>> are in:
>>> Otherwise PHP's casting rules are applied in an order to be as
>> lossless as possible.
>>
>> That’s really the only motivation behind that.
>
>
> Cheers, that's more or less what I thought.
>
> I've yet to come up with a scheme that can be summarised any more simply
> than that table, but FWIW below is how I've been trying to think about it...
>
>
>
>
> Strict mode rules are easy; try, in order:
> 0. Match without casting
> 1. Cast int -> float
>
> Weak mode rules must start with the same rules strict mode would, to
> avoid confusion.
>
> After that, there are various casts available, and there's not a clear
> precedent for the order that I can think of.
>
> There are two somewhat contradictory aims:
> - use "narrower" types where possible, e.g. for string("") passed to
> "int | bool" we probably prefer bool(false) over int(0)
> - use lossless casts where possible, e.g. for float(1.5) passed to "int
> | string" we probably prefer string("1.5") over int(1)
>
> The following casts are always lossless:
>
> - anything -> string (with possible exception of float precision limits)
> - boolean -> anything (1 bit of information is easy to retain :P)
>
> The following may be lossless in some common cases:
>
> - string -> int (ctype_digit)
> - string -> float (roughly, is_numeric)
> - float -> int (whole numbers)
> - int -> float (where magnitude < 2^53, but this is pre-empted as high
> priority by the strict rules)
>
> The following are pretty much always lossy:
>
> - anything -> boolean
>
>
>
>
> I'm not quite sure what to conclude from all that, but thought I'd write
> it down for the record.
>
> Cheers,
> --
> Rowan Collins
> [IMSoP]
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php