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

Isn't this exactly what the backtrace is for?

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