Re: [RFC] Traits with interfaces
| From: | Kevin Gessner | Date: | Fri, 19 Feb 2016 19:13:33 +0000 |
| Subject: | Re: [RFC] Traits with interfaces | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-91325@lists.php.net to get a copy of this message | ||
On Thu, Feb 18, 2016 at 2:16 PM, Chase Peeler <chasepeeler@gmail.com> wrote:
>
>
> On Thu, Feb 18, 2016 at 1:29 PM Nikita Popov <nikita.ppv@gmail.com> wrote:
>
>> HHVM already supports "trait Foo implements Iface" with the semantics that
>> the interface is also implemented by the using class.
>>
>> Additionally HHVM supports a notion of "require implements Iface" which
>> means that the using class must implement this interface.
>>
>
This was mentioned in the original traits RFC, but never got voted or
implemented:
https://wiki.php.net/rfc/horizontalreuse#requiring_composing_class_to_implement_interface
It's orthogonal to this RFC.
>
>> Why should it matter if the class using the trait actually implements the
> interface? If the person just wants the functionality, but, for whatever
> reason, doesn't want to actually implement the interface, why should it
> matter?
>
> I think the trait should HELP the person implementing an interface. The
> trait should be able to say (whether via comments or an engine enforceable
> construct) "Hey, I've done everything needed for you to implement this
> interface" but, at no time, should the trait force the class utilizing it
> to interact (via extend or implement or use) a 3rd artifact.
>
> trait foo implements myinterface {}
> class bar { use foo;}
> class baz implements myinterface { use foo;}
>
> Both of the above should be legal, and $myBar instanceof myinterface
> should return false;
>
This is Proposal 1 in the new draft of my RFC:
https://wiki.php.net/rfc/traits-with-interfaces
Does that proposal sound like what you'd want?
Cheers
-- Kevin
>