我使用的是5.3.10,并试图用下面的方式创建闭包,但它给出了解析错误。谁能告诉我为什么会出现解析错误?
class ABC {
public static $funcs = array(
'world' => function() {
echo "Hello,";
echo "World!\n";
},
'universe' => function() {
echo "Hello,";
echo "Universe!\n";
},
);
}发布于 2012-06-06 03:06:08
这不起作用的原因是,在PHP中,不允许将闭包直接分配给(静态)类变量初始化器。
因此,为了让您的代码正常工作,您必须使用以下解决方法:
<?php
class ABC {
public static $funcs;
}
ABC::$funcs = array(
'world' => function() {
echo "Hello,";
echo "World!\n";
},
'universe' => function() {
echo "Hello,";
echo "Universe!\n";
},
);
$func = ABC::$funcs['world'];
$func();解决方法取自对堆栈溢出问题的回答:PHP: How to initialize static variables
顺便说一句,注意直接通过ABC::$funcs['world']()调用函数也是不可能的。要实现这一点,你必须使用引入了函数数组取消引用功能的PHP>= 5.4。
发布于 2012-06-06 03:00:14
静态属性只能使用文字或常量进行初始化。摘自http://php.net/manual/en/language.oop5.static.php的PHP手册。
与任何其他
静态变量一样,静态属性只能使用文字或常量进行初始化;不允许使用表达式。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。
https://stackoverflow.com/questions/10902393
复制相似问题