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
> yohg...@ohgaki.net

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

Reply via email to