Hi Sara (and thanks for continuing the work!)

Le Tue Feb 17 2015 at 23:04:20, Sara Golemon <poll...@php.net> 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

Reply via email to