Kristian Koehntopp wrote: > On Thu, Apr 04, 2002 at 03:06:30PM -0800, Shane Caraveo wrote: > >>>Recommendation: >>> >>>If overload() indeed supports variably named callback functions >>>such as __get_x(), support for this should be removed in order >>>to avoid a number of possible inconsistencies and namespace >>>pollution. >>> >> >>Yes it does support it. No it shouldn't be removed. Why not explain >>the problems you perceive. > > > 1. Variant: > > class A { > > function __get_x(...) { > > } > } > > class B extends A { > > } > > overload("B"); > > Does A::__get_x() magically become an automated callback in B? > When A was written, it was obviously never intended to be one. > How is this being handled?
I'm not sure how it's being handled, been a while since I've looked at the overload code. I feel it should be overloaded. I don't see that it was obviously never meant to be a getter. To me, there is a specific syntax to getters/setters/call handlers, and a class written with them should expect they be used that way. > 2. Variant: > > class C { > ... > } > > overload("C"); > > $c = new C; > aggregate($c, "A"); > > Again, does A::__get_x() magically become an automated callback > in C? How is this being handled? Again, I feel A should be overloaded. > Generally speaking, automated callback functions such as > constructors, destructors, getters, setters and wrappers should > never have variable names. They shall use only a small and > clearly defined part of the namespace. All kind of strange > things happen, if you inherit, aggregate or MI such functions. Generally speaking, I wouldn't agree. This is just about how python does things, and it works very well, and is extremely usefull. Even JS has setters and getters that can be inherited. Specificly speaking about PHP, I would hope the implementations take this into account and deal with them apropriately. > When you are using constant names for such functions, at least > defining them in your derived class will for sure overwrite and > contain any inherited behaviour and you will know that you are > clean and operate in a controlled namespace. > > We have had this with PHP 3 constructors running wild, we had > this with PHP FI, 3 and 4 poisoning the global namespace, and we > really should /not/ make this kind of mistake again. These items are very far removed from problems in FI or 3, and don't use the global namespace. I guess being used to useing these features in other languages, I just don't see a problem, as I don't see the issues you are talking about. In fact, I think overloading has not been taken far enough, but that is another story. Shane -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php