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....@gmail.com> wrote: > On Tue, Apr 19, 2016 at 3:31 PM, Joe Watkins <pthre...@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 >