> 
>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
>
>


Reply via email to