Re: horizontal reuse: traits vs. grafts

From: Date: Thu, 25 Mar 2010 21:59:43 +0000
Subject: Re: horizontal reuse: traits vs. grafts
References: 1 2 3 4 5 6 7  Groups: php.internals 
Request: Send a blank email to internals+get-47623@lists.php.net to get a copy of this message
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



Thread (21 messages)

« previous php.internals (#47623) next »