Php 私有静态属性中的匿名函数

Php 私有静态属性中的匿名函数,php,php-7,Php,Php 7,引起问题的代码的简化版本为: class Test { private static $foo = [ "bar" => "baz", "callable" => function() {echo "Derp";} ]; }; var_dump(new Test()); 以上是: PHP致命错误:常量表达式中包含无效操作。。。在线5 有没有干净的替代品,或者我必须求助于 class Test { private static

引起问题的代码的简化版本为:

class Test {
    private static $foo = [
        "bar" => "baz",
        "callable" => function() {echo "Derp";}
    ];
};
var_dump(new Test());
以上是:

PHP致命错误:常量表达式中包含无效操作。。。在线5

有没有干净的替代品,或者我必须求助于

class Test {
    private static $foo = null;
    public static function initFoo() {
        self::$foo = self::$foo ?? [
            "bar" => "baz",
            "callable" => function() {echo "Derp";}
        ];
    }
}
Test::initFoo();
var_dump(new Test());

以上工作。只是想知道有没有更好的方法。令人遗憾的是,可调用项不被认为是静态可调用的,考虑到它们(据我所知)不需要任何计算——即使这样,我们现在也有了关于静态属性的基本操作…

为什么不在类上使“可调用”成为一个静态方法?因为实际的代码是一个大数组。。。我想“严格正确”的方法是为每种类型的代码都有一个子类。。。事实上,仔细想想,我可能会这么做…现在没有一个干净的替代方案,不。常量只能是null、boolean、integer、float、string或它们的数组。这在未来的版本中可能会发生变化,但目前情况就是这样。您可以使用一个命名函数,然后使用
“callable”=>“function\u name”
(如果函数名为
function\u name
),但这并不理想。您还可以使用静态方法(
“callable”=>[“Test”,“methodName”]
)。