On 11 December 2010 16:47, Stefan Marr <p...@stefan-marr.de> wrote:
> Hi:
>
> Traits do not provide any special provisioning for handling properties, 
> especially, there is no language solution for handling colliding property 
> names.
> The current solution/idiom for handling state safely in a trait is to use 
> either abstract set/get methods or an abstract get that returns a reference 
> to the property in the class.
>
> However, at the moment it is possible to define properties in a trait:
>
> trait Foo {
>  private $a;
>  public  $foo;
> }
>
> For the moment, that information is completely ignored, thus:
>
> class Bar {
>  use Foo;
> }
> property_exists('Bar', 'a') === false
>
>
> Well, and that is a rather inconsistent status-quo.
>
> I would like to have that fixed in one or another way.
>
> One possibility would be to forbid property definition in a trait altogether.
> That reduces a bit the possibility to have wrong expectations about 
> properties, however, the dynamic property creation is still possible.
>
> Another way would be to merge the properties in the composing class.
> The question here would be how to treat visibility modifiers: how to merge 
> public and private, should it result in public, or private?
> And, to discorage users to go this way, should there be a STRICT notice? 
> Options here are a notice whenever a property is defined in a trait, or 
> whenever properties are silently merged.
>
>
> Comments very welcome.
>
> Thanks
> Stefan

>From the rfc [1], "A Trait is similar to a class, but only intended to
group functionality".

I'm guessing that says it all. A trait has no properties.

But.

If properties are to be added to a trait, I think that should come as
a further enhancement and let traits start out as "methods only".

If a trait is properties, then also supporting constants and the other
sort of set/get properties would provide a strong level of
consistency. If I can put it in a class, I can put it in a trait.

As visibility on the traits methods can be manipulated via the
aliasing mechanism, so should any visibility to a property.

Richard.

[1] http://wiki.php.net/rfc/horizontalreuse
-- 
Richard Quadling
Twitter : EE : Zend
@RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to