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


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to