Function tables

I'd like to implement one of these (a function table).

First I thought that execution through variable functions
($foo='bar', $foo() executes the function 'bar') would work work, but
this seems to get upset when my function is actually a method of a
class.

Then I hoped that call_user_func(_array) would do the trick, but this
seems to get upset when the method uses "this", which is something of
a serious limitation it seems to me.

Anyone know ways around either or both of these apparent (to me)
problems?

Regards
Mark
Mark Stanton [ Mi, 02 Mai 2007 22:56 ] [ ID #1702950 ]

Re: Function tables

On May 2, 4:56 pm, Mark Stanton <m... [at] vowleyfarm.co.uk> wrote:
> I'd like to implement one of these (a function table).
>
> First I thought that execution through variable functions
> ($foo='bar', $foo() executes the function 'bar') would work work, but
> this seems to get upset when my function is actually a method of a
> class.

You can use variable function names with class methods. The following
works just fine and echo's out "baz":

class Foo {
public function bar($x) {
echo $x;
}
}

$f = new Foo();

$funcName = 'bar';
$f->$funcName('baz');

>
> Then I hoped that call_user_func(_array) would do the trick, but this
> seems to get upset when the method uses "this", which is something of
> a serious limitation it seems to me.

call_user_func() can also be used with object methods (even when they
reference "this"). The following also correctly echo's out "baz":

class Foo {
protected $x = 'baz';

public function bar() {
echo $this->x;
}
}

$f = new Foo();
call_user_func(array($f, 'bar'));

>
> Anyone know ways around either or both of these apparent (to me)
> problems?
>
> Regards
> Mark

So these aren't really problems.
zeldorblat [ Do, 03 Mai 2007 00:02 ] [ ID #1702951 ]

Re: Function tables

On May 2, 6:02 pm, ZeldorBlat <zeldorb... [at] gmail.com> wrote:
> On May 2, 4:56 pm, Mark Stanton <m... [at] vowleyfarm.co.uk> wrote:
>
> > I'd like to implement one of these (a function table).
>
> > First I thought that execution through variable functions
> > ($foo='bar', $foo() executes the function 'bar') would work work, but
> > this seems to get upset when my function is actually a method of a
> > class.
>
> You can use variable function names with class methods. The following
> works just fine and echo's out "baz":
>
> class Foo {
> public function bar($x) {
> echo $x;
> }
>
> }
>
> $f = new Foo();
>
> $funcName = 'bar';
> $f->$funcName('baz');
>
>
>
> > Then I hoped that call_user_func(_array) would do the trick, but this
> > seems to get upset when the method uses "this", which is something of
> > a serious limitation it seems to me.
>
> call_user_func() can also be used with object methods (even when they
> reference "this"). The following also correctly echo's out "baz":
>
> class Foo {
> protected $x = 'baz';
>
> public function bar() {
> echo $this->x;
> }
>
> }
>
> $f = new Foo();
> call_user_func(array($f, 'bar'));
>
>
>
> > Anyone know ways around either or both of these apparent (to me)
> > problems?
>
> > Regards
> > Mark
>
> So these aren't really problems.

Correction. In the first case, that's an /object/ method. If you
want to call a /class/ (static) method that way, you would do it with
call_user_func like this (which I think is what you're trying to get
to):

class Foo {
public static function bar($x) {
echo $x;
}
}

call_user_func(array('Foo', 'bar'), 'baz');
zeldorblat [ Do, 03 Mai 2007 00:07 ] [ ID #1702953 ]

Re: Function tables

On May 2, 12:56 pm, Mark Stanton <m... [at] vowleyfarm.co.uk> wrote:
> I'd like to implement one of these (a function table).
>
> First I thought that execution through variable functions
> ($foo='bar', $foo() executes the function 'bar') would work work, but
> this seems to get upset when my function is actually a method of a
> class.
>
> Then I hoped that call_user_func(_array) would do the trick, but this
> seems to get upset when the method uses "this", which is something of
> a serious limitation it seems to me.
>
> Anyone know ways around either or both of these apparent (to me)
> problems?
>
> Regards
> Mark

Please give more explanation !!!
Beshoo [ Do, 03 Mai 2007 02:01 ] [ ID #1703840 ]

Re: Function tables

In article <1178143629.149286.195870 [at] h2g2000hsg.googlegroups.com>,
ZeldorBlat wrote:
> > You can use variable function names with class methods. The following
> > works just fine and echo's out "baz":

Thank you for that. I'll give it a go as soon as I have a chance.

I first tried this a couple of months ago, then couldn't post to this
newsgroup for a long time and have just been able to. So now I'm going to
have to think hard to try to remember exactly what I was trying to do :-(

Regards
Mark
usenet [ Sa, 05 Mai 2007 20:53 ] [ ID #1705342 ]
PHP » alt.php » Function tables

Vorheriges Thema: split with regex
Nächstes Thema: Strange Behavior using MySQL