1

我正在使用 5.3.10 并尝试以下列方式创建闭包,但它给出了解析错误。谁能告诉我为什么它会给出解析错误?

class ABC {
    public static $funcs = array(
        'world' => function() {
            echo "Hello,";
            echo "World!\n";
        },
        'universe' => function() {
            echo "Hello,";
            echo "Universe!\n";
        },
    ); 
}
4

2 回答 2

4

这不起作用的原因是在 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();

解决方法取自 Stack Overflow 上这个问题的答案:PHP: How to initialize static variables

顺便说一句,请注意,也不能直接通过ABC::$funcs['world'](). 为此,您必须使用 PHP >= 5.4,它引入了函数数组解引用。

于 2012-06-05T19:06:07.650 回答
0

静态属性只能使用文字或常量进行初始化。来自http://php.net/manual/en/language.oop5.static.php的 PHP 手册:

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。

于 2012-06-05T19:00:14.287 回答