Hi Sara (and thanks for continuing the work!)
Le Tue Feb 17 2015 at 23:04:20, Sara Golemon <[email protected]> a écrit :
[...]
> 2) Define a way to enable "strict mode" (we'll be weak by default).
>
[...]
> 3) Tighten up coersion rules for weak mode. i.e. "10 dogs" for an int
> is a violation, but "10" is acceptable.
>
Regarding 2) and 3):
An option might be to implement "weak mode" only and configure the coercion
rules "reporting" in a similar way than with the error_reporting
configuration entry.
Not focusing on the details here, but I think about something like:
function foo(int $a) {
var_dump($a);
}
ini_set("coercion_reporting", 0); // current PHP 5.x behaviour
foo(7);
// int(7)
foo("7");
// int(7)
foo("7 dogs");
// int(7)
ini_set("coercion_reporting", COERCION_WARNING); // Warn, but do not
fail in case of potentially bad coercion
foo(7);
// int(7)
foo("7");
// int(7)
foo("7 dogs");
// Warning: Unsafe coercion transforming "7 dogs" to "7".
// int(7)
ini_set("coercion_reporting", COERCION_ERROR); // Fail in case of
potentially bad coercion
foo(7);
// int(7)
foo("7");
// int(7)
foo("7 dogs");
// Catchable fatal error: Unsafe coercion transforming "7 dogs" to "7".
The biggest advantage, IMHO, is that you get the exact same result whether
you do:
foo((int) $value);
or:
foo($value);
... whatever the mode you are in.
Basically, this is weak type hints + something similar to what I
contributed in the past with the "Array to string conversion" notice (see:
https://github.com/php/php-src/commit/d81ea16e).
Care to share the pro's/con's you see with a solution like that?
Thanks in advance.
Cheers,
Patrick