我可以在PHP中的数组中放置匿名函数吗?

时间:2012-02-01 11:25:07

标签: php anonymous-function

  

可能重复:
  Workaround for basic syntax not being parsed
  Why don't PHP attributes allow functions?

我正在

  

解析错误:语法错误,第87行/home/codemonkey/dev/broadnet/bito.api2/broadnet/resources/broadmapresource.php中的意外T_FUNCTION

从这段代码:

private $debugFunctions = array(
    "testing" => function() // Line 87
    {
        return "I'm a test function!";
    },
    "foo" => function()
    {
        return "bar";
    }
);

我的印象是我可以在任何可以使用$variables的地方使用匿名PHP函数。这是一个例外,还是我做错了什么?

我正在使用PHP 5.3.9

4 个答案:

答案 0 :(得分:3)

您不能使用class属性执行此操作,属性初始化必须是常量值。

  

初始化必须是一个常量值 - 也就是说,它必须能够   在编译时进行评估,不得依赖于运行时   信息以便进行评估。

答案 1 :(得分:3)

使用构造函数:

class TestClass {
    private $debugFunctions;

    public function __construct() {
        $this->debugFunctions = array(
            "testing" => function()
            {
                return "I'm a test function!";
            },
            "foo" => function()
            {
                return "bar";
            }
        );
    }
}

答案 2 :(得分:0)

不是那样的,请看create_function。 它在当前作用域中创建一个新函数并返回函数名称。

private $debugFunctions = array(
    "testing" => create_function('', 'return "I\'m a test function!";'),
    "foo" => create_function('', 'return "bar";');
);

不确定上述示例是否有效。我没时间测试它。

另请注意,使用create_function会显着降低应用程序的速度,具体取决于您使用它的频率。

答案 3 :(得分:0)

你可以做到。

只需在构造函数中初始化它:

function __construct() {
    $debugFunctions = array(
        "testing" => function() // Line 87
        {
            return "I'm a test function!";
        },
        "foo" => function()
        {
            return "bar";
        }
    );
}