Nikita Popov wrote on 21/03/2016 17:05:
While it is no secret that we don't particularly like references, this is not the reason why they are forbidden. There is no conspiracy to punish users of references by denying them use of new typing features. No, the reasons here are technical. Let me illustrate some of the issues involved in more detail.


Thanks for the detailed explanation of the problems, which are indeed deeper than I'd appreciated. To be clear, I never thought it was the intention to dissuade users from using references, but a couple of people have implied that they consider it no bad thing.


For me, the restriction on setting references makes this whole feature a no-go for the language as it stands. I don't think it is at all reasonable for the following code to produce a TypeError:

class Sorter {
    private array $data;
    public function __construct(array $data) {
        $this->data = $data;
        sort($this->data);
    }
}
new Sorter([1,3,6,5,2,4]);


It may be that we've reached the limit of how much typing we can add to the language incrementally, and need actual typed variables, so that references could be made only between variables with the same type hint, e.g.

class A { public int $foo=42; }
$a = new A;
int $ref =& $a->foo;

The sort() example would work in this scenario because the expected parameter type is array, so the reference being created is of the matching type.

Obviously, this would be a huge change to the language, and no doubt have all sorts of impacts and problems of its own, but I don't think it makes sense to say "you can typehint your property names, but you lose some existing functionality if you do so, for technical reasons".

Regards,
--
Rowan Collins
[IMSoP]

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

Reply via email to