4

看来您不能在类的范围内定义一组可调用方法。为什么不?

为什么这是有效的 PHP(参见http://3v4l.org/1JeQr

$methods = array(
    1 => function($subject, $value){
        return ($subject == $value);
    }
);

var_dump($methods[1]('a', 'a'));

但不是这个(见http://3v4l.org/FL449

class Foo {
    public static $methods = array(
        1 => function($subject, $value){
            return ($subject == $value);
        }
    );
}

var_dump(Foo::$methods[1]('a', 'a'));
4

2 回答 2

5

一个非常快速的答案,因为我正在使用手机工作(最终可以稍后编辑。

定义闭包实际上执行了类型对象的实例化Closure。PHP 只支持原生内部类型作为类的默认值,这意味着构造闭包显然行不通。

于 2013-10-10T19:24:55.307 回答
-1

这是因为类中的属性定义只允许您分配简单、直接的值。类常量分配更加严格。这意味着在属性定义范围内不允许从函数派生的值、使用派生值或对象填充的数组或任何算术。

如果你想在对象初始化时分配一个闭包数组,你可以在类的构造中自由地这样做。像这样:

class Foo {
    public static $methods;

    function __construct() {
        $this->methods = array(
                               1 => function($subject, $value) {
                                       return ($subject == $value);
                                    }
                               );
    }
}
于 2013-10-10T19:23:14.080 回答