On 03/06/2016 11:16, Thomas Bley wrote:
why not try all types weakly from left to right in weak mode?
Rule: if type check would give a fatal error for a type, try next type.

This is what I suggested, but Bob is insistent that weak mode should always select the same type as strict mode where there is a valid strict match, which I guess makes sense.

A strict left-to-right check violates that:

function i(string | int $x) { echo gettype($x); }
i(10); // string in weak mode, int in strict mode

function j(int | string $x) { echo gettype($x); }
j('10'); // int in weak mode, string in strict mode


The main complication that I haven't quite got my head round yet is the fact that an int->float coercion is allowed in strict mode. So to be consistent, weak mode needs to privilege that cast:

function k(string | float $x) { echo gettype($x); }
k(10); // float

But in other cases it doesn't seem sensible to privilege float over string:

function l(string | float $x) { echo gettype($x); }
l("1.5a"); // I would expect string, but float would succeed if attempted

Regards,
--
Rowan Collins
[IMSoP]

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

Reply via email to