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

Reply via email to