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
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php