Paul van Haren wrote:
> OK guys, thanks for all your inputs. 
> 
> Based on your guidance, I have tested the following code with a
> series of variations: 
> 
>       class foobar {
>               function bar2 () {
>                       echo "Yep, in bar2() right now\n";
>               }
> 
>               public function foo2 () {
>                       $a = "bar2";            // Experiment 0
>                       $a();                   // Fatal error
>               }
>       }
> 
> And the variations:
>       $a = "bar2";            // Experiment 0
>       $a();                   // Fatal error: Call to undefined function 
> bar2()
> 
>       $a = "foobar::bar2";    // Experiment 1
>       $a();                   // Fatal error: Call to undefined function 
> bar2()
> 
>       $a = "bar2";            // Experiment 2
>       eval($a."();");         // Fatal error: Call to undefined function 
> bar2()
> 
>       $a = "foobar::bar2";    // Experiment 3
>       eval($a."();");         // Works but far from elegant
> 
>       $a = "bar2";            // Experiment 4
>       $this->$a();            // Works fine
> 
>       $a = "bar2";            // Experiment 5
>       self::$a();             // Works fine
> 
> So, I have a working solution right now. But I still don't understand the
> essence of the differences between experiment #1 and #4. Also, I don't
> understand the need to specify the class name in experiment #3, coming
> from #2. Functions bar2() and foo2() are part of the same class foobar,
> and I would assume that the name 'bar2' would be in scope of the function
> foo2.

your assumptions and php's reality differ. symbol names resolution is never
tired in the class scope.

        $a = "foobar::bar2";
        $a();

this is trying to call a function called "foobar::bar2", which given that
you cant do (parse error):

        function foobar::bar2() {}

whatever munged error message you get regarding 'bar2()' not existing,
the fact remains that 'variable' function name functionality has no concept
of class scope, the T_PAAMAYIM_NEKUDOTAYIM is not recognized. never has been,
probably never will be.

        class foo {
                function bar1() {
                        $a = "foo::bar2";                       
                        call_user_func(explode("::",$a));
                }

                static function bar2() {
                        echo __METHOD__,"\n";
                }
        }

        $foo = new foo; $foo->bar1();


having no idea what it is that your actually trying to achieve, it's hard
to tell whether any percieved limitation is justified.

you might consider taking a look at reflection:

        http://nl2.php.net/reflection


> 
> BTW: I'm running PHP v5.2.0-8 build and distributed by Debian (etch1).
> 
> Thanks again and regards, Paul.
> 

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to