Hi Ben:

Here the second part, on your extension proposal.

On 02 Jan 2011, at 13:16, Ben Schmidt wrote:

> Extension
> - - - - -
> 
> I suggest these two problems can be simply solved by introducing two
> additional uses of the trait keyword: as a scoping keyword and an access
> specifier.
> 
> As a scoping keyword, it would be used analogously to self. Method calls
> such as $this->print() could be replaced with trait::print() when the
> programmer desires to ensure that their trait method, and only their
> trait method, is called--when there is no intention that overriding
> should be possible. It would only be able to be used in a trait, and
> could only be used to reference methods or properties defined in the
> same trait, using their original name.
> 
> As an access specifier, it would be used instead of public, private,
> etc. in trait definitions, to mean that the member (data or method) can
> and can only be accessed using the mechanism above (trait::).

Ok, that would actually get us around all the meta-programming problems.
When you say that the 'trait'-access modifier always requires the access via a 
specific keyword (trait::) then mangling the name should be possible.
On the other hand, what would iterating over the object properties show?
Multiple properties with the same name, like with inherited private properties 
I suppose?

And an occurrence of trait:: would mean, do a $this-> but mangle the name first 
with the trait's name the original definition was in. Should be possible, but 
would certainly impact the Zend Engine a bit more than what we have now.

Certainly an interesting approach.


Has someone else an opinion on that?



> 
> 
> Overriding
> ==========
> 
> Limitation
> ----------
> 
> At present, the overriding semantics of traits are that a method defined
> in a class proper overrides a method defined in a used trait which in
> turn overrides a method defined in an ancestor class.
Bye the way, where comes that terminology from: class proper? We are talking 
about the body of a class, right?

Well, but I will stop here, and try to cover the rest in the next mail...

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

Reply via email to