Yasuo Ohgaki wrote on 17.09.2015 00:10:
> Hi all,
>
> PHP 7 has strict_types mode for function parameters/return values and
> these are binded to certain type strictly.
> https://wiki.php.net/rfc/scalar_type_hints_v5
>
> Why not make strict_types mode more strict?
> The idea is as follows:
>
> <?php
> declare(strict_types=1);
>
> function foo(int &$i) {
> $i = "string"; // Raise error
> $i = function_returns_string(); // Raise error
> $i = 1234.5678; // Raise error
> $i = function_returns_float(); // Raise error
>
> $n = 123;
> // do something
> $n = array(); // Raise error
> }
> ?>
>
> Assigning different type to already initialized variable is a bug most
> likely. There may be cases that variable should have several types,
> e.g. return INT for success and FALSE for failure, but programmers can
> use different variable or return value directly or make BOOL/NULL
> exception.
>
> This is useful with reference especially. For example,
>
> <?php
> declare(strict_types=1);
>
> function foo(int &$i) {
> $i = 'string';
> }
>
> $i = 0;
> foo($i);
> var_dump($i);
> ?>
>
> outputs
>
> string(6) "string"
>
>
>
> Just an idea. Any comments?
>
> --
> Yasuo Ohgaki
> [email protected]
Hey,
I think there is a lot of code out there that changes types, but is not a bug,
e.g.:
$params = array('a', 'b');
$params = json_encode($params);
So I would extend the declare parameters:
declare(strict_types=1, strict_declare=1);
function foo(int &$i) {
$i = "string"; // Raise error
...
Regards
Thomas
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php