0

我有以下示例代码

<?php

class Test {
    function foo() {
        print "foo\n";
    }

    function bar() {
        $func = 'foo';
        $func();
    }
}

$test = new Test();
$test->bar()

它调用$test-bar(),内部调用一个名为foo. 这个变量包含字符串foo,我希望函数像这里一样foo被调用。而不是得到预期的输出

foo

我收到一个错误:

PHP Fatal error:  Call to undefined function foo()  ...

使用字符串作为函数名时,如何正确执行此操作?字符串 'func' 可能表示实际代码中类范围内的几个不同函数。

根据文档,上面应该像我编码的那样工作,或多或少......

4

3 回答 3

5
<?php

class Test {
    public function foo() {
        print "foo\n";
    }

    public function bar() {
        $func = 'foo';
        $this->$func();
    }
}

$test = new Test();
$test->bar();

?>

使用这个来访问这个类的当前函数

于 2013-08-14T17:35:00.540 回答
0

你使用关键字$this

<?php

class Test {
    function foo() {
        print "foo\n";
    }

    function bar() {
        $this->foo(); //  you can do this

    }
}

$test = new Test();
$test->bar()

有两种方法可以从字符串输入调用方法:

$methodName = "foo";
$this->$methodName();

或者你可以使用 call_user_func_array()

call_user_func_array("foo",$args); // args is an array of your arguments

或者

call_user_func_array(array($this,"foo"),$args); // will call the method in this scope
于 2013-08-14T17:28:12.583 回答
0

您可以做的是使用该函数call_user_func()来调用回调。

<?php

class Test {
    public function foo() {
        print "foo\n";
    }

    public function bar() {
        $func = 'foo';
        call_user_func(array($this, $func));
    }
}

$test = new Test();
$test->bar();
于 2013-08-14T17:39:38.090 回答