class SomeStruct{ public int $a; }

class Joe
{
    public SomeStruct $struct;

    function test1() : SomeStruct{
        return new SomeStruct();                // TypeError: can't return
a type whose fields' type declarations aren't fulfilled
    }

    function test2(SomeStruct $struct){         // TypeError: can't pass in
a type whose fields' type declarations aren't fulfilled [*]
    }

    function test3(){
        $this->struct = new SomeStruct();       // TypeError: can't assign
to a typed field a type whose fields' type declarations aren't fulfilled
    }
}

(new Joe)->test2(new SomeStruct()); // [*]

2016-03-16 19:41 GMT+01:00 Johannes Schlüter <johan...@schlueters.de>:

> On Wed, 2016-03-16 at 19:15 +0100, Bob Weinand wrote:
> >
> > Eih, only to typed properties. Everything else would be insane ;-)
> > Sorry for being imprecise.
>
> Ok, quite a lot better, but still weird difference to the language.
>
>
> There's a notable amount of places where references are being used and
> often users aren't aware. (Binding parameters in database queries, in
> order to support OUT parameters, comes to mind, many array functions
> take an array, some functions use it to report error codes, ...)
>
> I guess this will be a famous support issue.
>
> And yeah, I'd love to "fix" all those places and get rid of the
> references, but BC ... it's quite massive :-)
>
>
> johannes
>

Reply via email to