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

Reply via email to