首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在类静态变量上创建闭包时出现PHP解析错误

问在类静态变量上创建闭包时出现PHP解析错误
EN

Stack Overflow用户
提问于 2012-06-06 01:59:08
回答 2查看 892关注 0票数 1

我使用的是5.3.10,并试图用下面的方式创建闭包,但它给出了解析错误。谁能告诉我为什么会出现解析错误?

代码语言:javascript
复制
class ABC {
    public static $funcs = array(
        'world' => function() {
            echo "Hello,";
            echo "World!\n";
        },
        'universe' => function() {
            echo "Hello,";
            echo "Universe!\n";
        },
    ); 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-06 03:06:08

这不起作用的原因是,在PHP中,不允许将闭包直接分配给(静态)类变量初始化器。

因此,为了让您的代码正常工作,您必须使用以下解决方法:

代码语言:javascript
复制
<?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。

票数 4
EN

Stack Overflow用户

发布于 2012-06-06 03:00:14

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

与任何其他

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10902393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档