> >Isn't this exactly what the backtrace is for? That's fair... but there are ate least two things undesireable about using the backtrace: 1. Performance - we can get the caller less work 2. using it is current-implimentation specific (i.e. developer needs to know the format of the array returned)
Chris Trahey Web Applications Developer Database Administrator CSISD [Technology] rquadl...@googlemail.com writes: >2009/9/17 Chris Trahey <ctra...@csisd.org>: >> It seems worthwhile in a service-provider situation where you do not >wish to >> enforce use of $this in service consumers. >> The service provider can impliment caller without modifying existing >code. >> >> Semantically, it should be considered redundant to pass $this in a >method >> call. There should be an implicit way for a message recipient to >determine >> who is sending the message, in a uniform way (not left up to the >consumers >> of your API to impliment). >> >> Thanks for your consideration. >> >> Chris Trahey >> Sent from my iPhone >> >> On Sep 16, 2009, at 8:47 PM, Larry Garfield <la...@garfieldtech.com> >wrote: >> >>> If the object needs to behave differently based on who called it, >there's >>> already a very easy way to do that: >>> >>> class A { >>> function foo() { >>> $b = new B(); >>> $b->bar($this); >>> } >>> } >>> >>> class B { >>> function bar($caller) { >>> if ($caller instance of A) { >>> // .. >>> } >>> } >>> } >>> >>> That's also therefore much more self-documenting and easier to test >>> (because >>> you can simulate what gets passed in) than a magic keyword. I don't >see a >>> need for new magic constants here. >>> >>> On Wednesday 16 September 2009 3:59:16 pm Chris Trahey wrote: >>> > (Please direct me elsewhere if necessary, this is a feature request) >>> > >>> > It would be handy to allow a method to behave differently based on >who >>> > is >>> > calling it. >>> > the function I am looking for would essentially do this: >>> > >>> > function getCaller(){ >>> > $bt = debug_backtrace(); >>> > return $bt[2]['object']; >>> > } >>> > But of course, there is a lot of uneccessary processing with that >call. >>> > Perhaps it could be implimented similar to "self" and "parent" >(actualy >>> > more like "static") keywords. >>> > >>> > So you could do: >>> > public function registerMe() { >>> > if( ! (caller instanceof 'my_interface')) throw new >>> > dev_execption(); >>> > if( ! ($this->authenticateMod(caller))) throw new >>> > admin_exception('module >>> > not active'); >>> > $this->loadedMods[caller->module_id()] = caller; >>> > return caller->onLoad(); >>> > } >>> > >>> > Chris Trahey >>> > Web Applications Developer >>> > Database Administrator >>> > CSISD [Technology] >>> >>> -- >>> Larry Garfield >>> la...@garfieldtech.com >>> >>> -- >> > > > >-- >----- >Richard Quadling >"Standing on the shoulders of some very clever giants!" >EE : http://www.experts-exchange.com/M_248814.html >Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731 >ZOPA : http://uk.zopa.com/member/RQuadling > >-- >PHP Internals - PHP Runtime Development Mailing List >To unsubscribe, visit: http://www.php.net/unsub.php > >