如何在php中的函数中返回一个函数?

时间:2013-04-19 07:39:26

标签: php function

我希望能够在类(函数setFunction)中设置函数。后来我想得到函数(带getFunction),我可以从外面调用(指定参数等)。这是我尝试过的:

class Test
{
    var $function;

    function setFunction($foo)
    {
        $this->function = $foo;
    }

    function getFunction()
    {
        return $this->function;
    }

    function foo1($a)
    {
        print "foo1: ".$a."\n"; 
    }

    function foo2($b)
    {
        print "foo2: ".$b."\n"; 
        }

}

$oClass = new Test();
$oClass->setFunction($oClass->foo1);
$oClass->getFunction()('test'); # <--- line 32

预期输出

foo1: test

但我得到了一个错误:

PHP Parse error:  syntax error, unexpected '(' in tester.php on line 32

任何想法如何解决这个问题?以下是一些限制因素:

  • 这必须适用于每个功能的任意参数。
  • 要定义的函数始终在类本身中指定(如果有帮助)。

2 个答案:

答案 0 :(得分:4)

您必须使用call_user_func

$oClass = new Test();
$oClass->setFunction(array($oClass, 'foo1'));
call_user_func($oClass->getFunction(), 'test');

array($oClass, 'foo1')callable,表示在类实例foo1上调用方法$oClass

答案 1 :(得分:-1)

php中的

函数不是一个对象。你不能这样做。