Re: RFC: Anonymous Class Lexical Scope

From: Date: Wed, 20 Apr 2016 03:54:41 +0000
Subject: Re: RFC: Anonymous Class Lexical Scope
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-92517@lists.php.net to get a copy of this message
I'm not sure it matters, but there is some precedent for this in JavaScript/ES6: function foo(bar) { return new class { myBar = bar; getBar() { return this.myBar; } }(); } console.log(foo('hello').getBar()); // "hello" (You can actually reference outer symbols anywhere in the definition of a JS class, so I could have used "bar" directly in "getBar" without going through a property.) On Wed, Apr 20, 2016 at 12:18 AM, Nikita Popov <nikita.ppv@gmail.com> wrote: > On Tue, Apr 19, 2016 at 3:31 PM, Joe Watkins <pthreads@pthreads.org> > wrote: > > > Morning Internals, > > > > Please review the following RFC: > > > > https://wiki.php.net/rfc/lexical-anon > > > > A look at the patch from those of you that do that would be good :) > > > > Hey Joe, > > The syntax and semantics proposed in this RFC don't sit quite well with me. > Especially the fact that a use($foo) on the class is then used as > $this->foo in methods is non-intuitive to me, as it differs from how the > same syntax behaves on closures. I'd like to suggest an alternative syntax: > > $foo = 42; > return new class { > private $bar = $foo; > public function getBar() { return $this->bar; } > } > > That is, allow properties inside the anonymous class to be initialized > based on values from the surrounding scope. This is more explicit (clearly > shows that a property is being created), it allows explicit control over > the visibility and, depending on implementation, might be more flexible > with regards to the values it accepts. It probably doesn't make sense to > restrict this to specific expressions, so all of > > return new class { > private $a = $var; > private $b = $obj->prop; > private $d = $obj->prop ?? 'default'; > // ... > } > > could be fine. > > Thanks, > Nikita >

« previous php.internals (#92517) next »