For me, the proposal is too complex.
I prefer intuitive concepts, that I may use without rereading manual again and again.
For this one, I even can't imagine a natural (not over-designed) use case.
But this is my personal opinion, and I may be wrong :)

I'll review the code later.

Thanks. Dmitry.


On 04/19/2016 04:29 PM, Joe Watkins wrote:
> What value?

Yes, shorter, more concise (from the programmers perspective) syntax.

Right now, if you do a lot of work with Closures, you have to verify their interface, the value in having the engine do it for you seems really obvious.

But also ...

> I thought the same might be implemented through anonymous classes.

An anonymous class cannot be rebound, they are obviously not the same thing.

> I didn't take a deep look into the code.

I'll wait until you have, I think :)

Cheers
Joe

On Tue, Apr 19, 2016 at 2:22 PM, Dmitry Stogov <dmi...@zend.com <mailto:dmi...@zend.com>> wrote:



    On 04/19/2016 03:52 PM, Joe Watkins wrote:
    Oh, it's confusing text in the RFC, using the word "Interface"
    ... that's meant as a placeholder for InterfaceName.

    Cheers
    Joe

    On Tue, Apr 19, 2016 at 1:50 PM, Joe Watkins
    <pthre...@pthreads.org <mailto:pthre...@pthreads.org>> wrote:

        Morning Dmitry,

          In your example, they will do the same thing.

          Anon classes don't have lexical scope, I have a patch for
        that, and an RFC, I'm just tidying it.


    OK. so this is not just a syntax sugar, but if you implement
    lexical scope for anonymous classes it's going to be sugar. Right?
    May be it's better to start from classes first?


          Even when anon classes do have lexical scope, there is
        value in being able to implement these kinds of interfaces
        using only a function.


    What value? just shorter syntax? or anything else?


          The changes to the vm are restricted to a few lines, that's
        not seriously a problem, is it !?


    I hope no. I didn't understand all details of proposal and I
    didn't take a deep look into the code.


          I don't see where I extend closure with an interface ...


    I meant new field zend_execute_data *interface in zend_closure
    structure.
    I thought the same might be implemented through anonymous classes.

    Thanks. Dmitry.



          > zend_do_inheritance_ex(type, zend_ce_closure, 1);
          >     zend_class_implements(type, 1, interface);

        Cheers
        Joe

        On Tue, Apr 19, 2016 at 1:01 PM, Dmitry Stogov
        <dmi...@zend.com <mailto:dmi...@zend.com>> wrote:

            <?php
            interface IFoo {
                public function method() : int;
            }

            $cb1 = function () implements IFoo : int {
                return 42;
            };

            $cb2 = new class implements IFoo {
              function method() : int {
                return 42;
             }
            };
            ?>

            Are $cb1 and $cb2 going to be the same (do the same)?
            Is this just a new syntax sugar, or a really new feature?

            According to implementation, I think, you shouldn't
            extend "zend_closure" with "interface".
            If this is a sugar, lets implement it as a sugar (without
            VM changes).

            But may be I didn't understand the idea at all :)

            Thanks. Dmitry.


            ________________________________________
            From: Joe Watkins <pthre...@pthreads.org
            <mailto:pthre...@pthreads.org>>
            Sent: Monday, April 18, 2016 13:22
            To: PHP internals
            Subject: [PHP-DEV] RFC: Functional Interfaces

            Morning Internals,

                Please review the following RFC:

            https://wiki.php.net/rfc/functional-interfaces

                An implementation is provided, and is testable on 3v4l.

                Review of the implementation from those of you that
            do that would be
            good :)

            Cheers
            Joe






Reply via email to