Jochem Maas wrote: > Christopher J. Bottaro wrote: >> Maybe I'm using "reentrant" incorrectly, but here is what I mean... >> >> class Test { >> function __get($nm) { >> if ($nm == 'x') >> return $this->func(); >> elseif ($nm == 'y') >> return 'y'; >> elseif ($nm == 'xx') >> return 'x'; >> } >> function func() { >> return $this->xx; >> } >> } >> $t = new Test(); >> print $t->y . "\n"; >> print $t->xx . "\n"; >> print $t->x . "\n"; >> print $t->func() . "\n"; >> >> I would expect the following code to output: >> y >> x >> x >> x >> >> But instead, it outputs: >> y >> x >> >> x >> >> Is this a bug? This limitation is not documented (maybe it should be?). > > its not a bug, I believe its documented somewhere how this works. > bottom line __get() does not work from 'inside' the class/object, > so do something like instead: > > function func() { > return $this->__get('xx'); > } > > which may not please the soul, but does work ;-) Hehe, my soul is hard to please...=P Actually, __get() does work from inside the class. In the sample code I posted, func() does indeed return 'x' when called from main. It does not work when called from within a call to __get(). In other words, $this->attribute does not work if __get() appears anywhere in the call stack. Its just a small annoyance. I use $this->attribute everywhere in the class, but I have to remember to use $this->__get(attribute) in methods that can be called from __get(). -- C -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php