PHP:关联数组中的匿名函数

3
可以吗?类似以下的代码(目前无法运行):
$prototype = array(
    'ext' => function ($args)
    {
        $ext = NULL;
        if (in_array(func_get_arg(0), array('js', 'css')))
            return $ext;
        else
            return 'js';
    },
);

你试过了吗?它报错了吗?你想要一个“是”的答案吗?请添加更多信息。 - Gordon
1
它在我的电脑上运行良好(PHP 5.3.6)。匿名函数是在PHP 5.3中引入的,因此请确保您已经升级。 - user142162
是你的语法出错了 =)。在最后一个 } 后面移除 , - cutsoy
@Tim Cooper 你说得对,我之前使用的是5.2.x版本而不自知 :) - yoda
2个回答

4

可以的。唯一的限制是你不能将它转换为对象。

<?php
    $foo = array(
        'bar' => function($text)
        {
            echo $text;
        }
    );
    $foo['bar']('test'); //prints "test"

    $obj = (object)$foo;
    $obj->bar('test'); //Fatal error: Call to undefined method stdClass::bar() in /code/REGnPf on line 11
?>

所以你可以将它转换为一个对象(不会出现错误)。之后你会因为使用了一个未定义的方法而得到一个错误,因为没有名为“bar”的方法;有一个名为“bar”的字段。即 $temp = $obj->$bar; $temp(); 在PHP中,字段和方法是完全独立的。 - newacct
@newacct,你能否提供一个更好的措辞吗? :) - Alex Turpin
1
另一个限制是,如果该数组是属性初始化程序的一部分,请记住复杂表达式将无法工作,其中包括匿名函数。 - Paul d'Aoust

4
当然是这样的:

<?php
$array = array(
        'func' => function($a) {
                return $a + 2;
        }
);
echo $array['func'](3);
?>

这将给你5 =)!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接