Yasuo,

On Wed, Sep 16, 2015 at 6:10 PM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:
> 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?
>

First, as mentioned by others, this really doesn't have overly much to
do with strict_types. It's introducing a new concept (which could
potentially be a new declare statement).

Second, i think the biggest limitation here is technological. If you
can find a way internally to type variables properly while keeping
copy-on-write semantics, then we can start that conversation on
whether we really want to do that or not. But so far, everyone I've
seen try to do something like that (namely for typed properties) has
wound up causing all sorts of weird edge-cases around references or
copy-on-write. Which is one reason we haven't seen a full proposal yet
for it.

So if you can come up with a patch that works, let's definitely talk
about it. But as Stas said, it's really not just making types more
strict, but it's fully blown variable typing. Which we can talk about,
but let's talk about explicitly (and preferably with an implementation
approach).

Thanks!!!

Anthony

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

Reply via email to