On 21/02/2008, Stefan Marr <[EMAIL PROTECTED]> wrote:
> Hi,
>
> Andi Gutmans schrieb:
> > a)
> > I think Traits should be able to act as a self-contained behavior which can
> > always be expected to work. For example if I want a Counter behavior
> I would like
> > that not to depend on the properties in the containing class. While I
> don't
> > think we should enable public nor protected properties in Traits I think
> > allowing for private properties in Traits would come in very handy.
> It also
> > is no problem when it comes to mangling as we can use the Trait name.
> >
> > class Trait {
> > private $counter = 0;
> > function getNextSerialNumber() {
> > return $this->counter++;
> > }
> > }
> >
> > I strongly recommend not to support protected/public and not to even get
> into
> > the discussion of dealing with conflicts of such properties.
> > But I think private is very useful.
> Hope I got it right, since your example is a class?
>
> Ok, stateful traits are useful in the sense of having self-contained
> units of reuse. Personally, I prefer them over stateless traits.
> But, here we will get additional confusion.
>
> You don't like to handle with visibilities of properties? Fine :)
> One way to do stateful traits is described in
> http://www.iam.unibe.ch/~scg/Archive/Papers/Berg07eStatefulTraits.pdf
>
> But the way you have proposed is stricter and may be sufficient.
>
> To avoid confusion and misconception I would like to change your
> proposal a bit. Private does suggest a semantics like methods, and would
> require to apply the flattening on properties like on methods. Since we
> do not like to handle conflicts, this would have to be done a bit
> different, in my opinion.
>
> Let's change ``private`` to ``local``:
> trait TCounter {
> local $counter = 0;
> function getNextSerialNumber() {
> return $this->counter++;
> }
> }
>
> class Website {
> use TCounter;
> }
>
> The resulting composition would have a property resulting from the
> TCounter property, but is only accessible from a method of the specific
> trait, i.e., it is composition local.
>
> Just an additional though :)
>
> Kind Regards
> Stefan
I think I see an issue with including properties.
If a trait is partially included at different levels of a layered object
base uses 2 methods of a trait.
extended uses 2 more methods of the same trait
another_base uses 1 method of the trait.
another_extended_base uses the remaining methods of the trait.
You would need to control the inclusion of the properties.
--
-----
Richard Quadling
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
"Standing on the shoulders of some very clever giants!"
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php