Oh, I fixed it ... I think ... carry on ... Cheers Joe
On Wed, Apr 20, 2016 at 7:01 AM, Joe Watkins <pthre...@pthreads.org> wrote: > Can we just halt this conversation for a few days. > > That implementation is totally and utterly wrong, it's so obvious this > morning ... I'm almost embarrassed. > > I must say that of all the suggestions made so far for syntax, I still > prefer use(). > > While the idea to allow symbols and expressions is very cool, it will > create so much confusion that an anonymous class can do things like set > objects as member properties but other classes can't. > > The syntax also looks absolutely terrible when it comes to refs: > > class { > public $thing = &$this->thing; > } > > This is almost literally *backwards*. > > All of the solutions suggested so far also create rather a lot of > repetition for anything that isn't example code. > > Anyway, the implementation is broken, let's come back to this discussion > later on, please. > > Cheers > Joe > > On Wed, Apr 20, 2016 at 4:54 AM, Jesse Schalken <m...@jesseschalken.com> > wrote: > >> 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 >>> >> >> >