Typical scenario (works for either of the properties - note that typed
properties that aren't nullable and have no default value also behave the
same way):

class Foo {
    private int $a;
    private $b;
    public function __construct() {
        unset($this->b);
    }
    public function __get(string $name) {
        $this->a = 123
        $this->b = 'abc';
        return $this->$name;
    }
    public function saySomething() : string {
        return $this->a . $this->b;
    }
}

echo (new Foo())->saySomething();

https://3v4l.org/Rn39Q (note: 3v4l doesn't have 7.4, so I simplified it a
bit)

@rowan: I've stated it multiple times in the past, but if the mechanism is
to be removed, then it should be replaced with a language-level concept of
laziness then.

On Sun, 10 Mar 2019, 20:32 Larry Garfield, <la...@garfieldtech.com> wrote:

> On Sun, Mar 10, 2019, at 1:52 PM, Marco Pivetta wrote:
> > Hi Rowan,
> >
> > Overall good idea, except that I disagree with the `unset()` being
> > disabled: that bit is strictly required for lazy-loading purposes, and
> > mostly harmless for userland ("normal" people don't do it, libraries do
> it).
> >
> > Besides that (blocker for me), if this RFC would be enforced in my coding
> > standards of choice 👍
> >
> > Does anybody know if this has potential for engine optimizations?
>
> Marco, have you an example of such lazy-loading tricks?  I'm not familiar
> with them but would like to be...
>
> I'm overall +1 here as well, as I am for most things that allow me to make
> my code stricter and pickier.  (I don't have a strong feeling on unset()
> either way.)
>
> --Larry Garfield
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to