看来你不能在类的范围内定义一组可调用方法。为什么不呢?
为什么这是有效的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'));
答案 0 :(得分:5)
因为我在手机上工作,所以答案很快(最终可以稍后编辑。
定义闭包实际上会对Closure
类型的对象执行实例化。 PHP仅支持本机内部类型作为类的默认值,这意味着构造闭包显然不起作用。
答案 1 :(得分:-1)
这是因为类中的属性定义只允许您指定 简单直接值 。类常量分配更具限制性。 这意味着在属性定义范围中不允许从函数派生任何值,不使用派生值或对象填充的数组或任何算术。
如果要在初始化对象时分配闭包数组,可以在类的构造中自由地执行此操作。像这样:
class Foo {
public static $methods;
function __construct() {
$this->methods = array(
1 => function($subject, $value) {
return ($subject == $value);
}
);
}
}