Re: typehinting traits
| From: | Stefan Marr | Date: | Mon, 17 Oct 2011 18:00:22 +0000 |
| Subject: | Re: typehinting traits | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-55849@lists.php.net to get a copy of this message | ||
Hi Ferenc:
On 17 Oct 2011, at 19:41, Ferenc Kovacs wrote:
> Hi Stefan,
>
> Multiple people asked me that how they can expect/check that a given object uses a trait or
> not.
> Of course one could write the concrete methods as a trait and always use a given interface for
> typehints, but I can't see why shouldn't instanceof and typehints in general work for
> traits.
> Is the any technical or maybe theoretical argument against this?
Originally I proposed traits including the semantics that traits directly implement interfaces.
The discussion is somewhere here: http://www.mail-archive.com/internals@lists.php.net/msg33935.html
I think Sebastian was the person with the strongest opinion on that particular issue:
http://www.mail-archive.com/internals@lists.php.net/msg33948.html
And I tend to agree with him.
Currently I think along the following lines:
A trait is not a full unit of reuse!
A class is.
Don't use traits where you should use classes and composition.
Traits do not guarantee anything, if you want to be sure your invariants hold, use classes and
composition.
Traits allow to reuse behavior in a much more flexible way, but they do not replace classes.
And, well, then there is this: https://wiki.php.net/rfc/horizontalreuse#requiring_composing_class_to_implement_interface
That should make sure that people can use interfaces for the purpose envisioned here.
For reference, there is also: https://bugs.php.net/bug.php?id=55613
But aside of the things I said before:
- theoretically: keeping interfaces and traits apart is a good, clean language design decision.
- practically: people LOVE ugly languages, because they get things done
So, well, I can't claim anything about value here.
The current situation might be more friendly to the teacher.
Another design might offer more freedom/power...
Best regards
Stefan
>
> --
> Ferenc Kovács
> @Tyr43l - http://tyrael.hu
--
Stefan Marr
Software Languages Lab
Vrije Universiteit Brussel
Pleinlaan 2 / B-1050 Brussels / Belgium
http://soft.vub.ac.be/~smarr
Phone: +32 2 629 2974
Fax: +32 2 629 3525