【问题标题】:PHP parse error while creating closures on a Class static variable在 Class 静态变量上创建闭包时 PHP 解析错误
【发布时间】:2012-06-09 18:30:12
【问题描述】:

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

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

【问题讨论】:

    标签: php closures


    【解决方案1】:

    这不起作用的原因是在 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,它引入了函数数组解引用。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-03-05
        • 2019-04-14
        • 2011-08-21
        • 2011-05-15
        • 2017-04-30
        • 1970-01-01
        • 2014-03-15
        • 2018-01-03
        • 1970-01-01
        相关资源
        最近更新 更多