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
>>>
>>
>>
>

Reply via email to