Re: Variable functions within an object
| From: | Curt Zirzow | Date: | Fri, 30 Jul 2004 17:39:27 +0000 |
| Subject: | Re: Variable functions within an object | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-192327@lists.php.net to get a copy of this message | ||
* Thus wrote Julio Sergio Santana:
>
> Curt Zirzow wrote:
>
> > $this->{$this->fname}();
> >
> > or (what it actually is doing.. )
> >
> > $func = $this->fname;
> > $this->$func();
> >
> >Curt
>
> The point here is that the named function is outside the object. That
> is, $this->foo() doesn't exist, so $this->{$this->fname}(), does not
> work either.
> But if you look at your suggested construct, I wonder why
> $this->{$this->fname}() is sintactically correct while
> {$this->fname}() is not (since we just striped out the prefix '$this->'
> which means that the function is inside the object).
Sorry, i did misread what actual function you were trying to
access, the problem is that {} isn't really the thing that expands
the variable its the special cases:
->{}
${}
{} by itself simply defines a code block.
> ...
>
> Clearly, $this->fname() means "call the object's method 'fname'",
> but
> {$this->fname}(), would mean "call the function whose name is
> '$this->fname'".
> I think, for the sake of orthogonallity, this feature should be added to
> the language.
One way to solve this without adding a feature like that would be:
${$this->fname} = $this->fname;
${$this->fname}();
or for the oneline purists :)
${ ${$this->fname} = $this->fname }();
wow.. ${} is more powerful than i had originally though.
Curt
--
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about. No, sir. Our model is the trapezoid!