On 25 Mar 2010, at 21:30, Stefan Marr wrote: > On 25 Mar 2010, at 16:37, Lukas Kahwe Smith wrote: >> Hi, >> >> this was just brought up on IRC. my understanding is that traits have no >> concept of properties, but grafts do (all hidden internally). correct? > Right, the Traits proposal as it is at the moment, avoids the explicit > discussion of state. > This is not a restriction per se, but could limit the composability of traits. > > To ensure composibility, you would have to resort to abstract methods which > are implemented by the composing class. Maybe I should clarify that.
Currently the semantics is implicitly the following: class Base{ var $a; } trait T1 { var $a; var $b; } trait T2 { var $a; var $c; } class Composite extends Base { use T1, T2; } and Composite would have the instance variables $a, $b, $c. The problem would be of course that Base, T1, and T2 could use $a for completely different things. Simple, but at the cost of composability/safety. But for most practical cases that should be 'good enough'. As already mentioned, if you want stronger guarantees, state accessor methods can be used. However, I think this implication is not discussed in the RFC, and works just because PHP can create the fields dynamically. Thus, I used 'var' here in the example, instead of defining a semantics and handling for public, private, protected. Best regards Stefan > > Best regards > Stefan > > > > -- > 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 > -- 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