Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类属性是否可以初始化为闭包数组?_Php_Arrays_Closures_Class Properties - Fatal编程技术网

Php 类属性是否可以初始化为闭包数组?

Php 类属性是否可以初始化为闭包数组?,php,arrays,closures,class-properties,Php,Arrays,Closures,Class Properties,我试图在静态配置数组中存储一些验证函数。在数组中存储函数似乎是可行的,但是,当我将相同的代码放入一个类中时,它失败了。有人知道发生了什么吗 $functions = array( 'function1' => function($echo) { echo $echo; } ); $functions['function1']("hello world"); // Works //---------- class A { public

我试图在静态配置数组中存储一些验证函数。在数组中存储函数似乎是可行的,但是,当我将相同的代码放入一个类中时,它失败了。有人知道发生了什么吗

$functions = array(
     'function1' => function($echo) {
           echo $echo;
      }
);

$functions['function1']("hello world");
// Works

//----------

class A {
    public static $functions = array(
        'function1' => function($echo) {
             echo $echo;
         }
    );
}

A::$functions['function1']("hello world");
//Parse error: syntax error, unexpected 'function' (T_FUNCTION)

当我使用PHP7运行这个程序(PHP5也会出错)时,我得到一个错误,基本上是说不允许实例化类变量时使用表达式。这就是它的工作原理:

$functions = array(
    'function1' => function($echo) {
        echo $echo;
    }
);

$functions['function1']("hello world");
// Works

//----------

class A {
    public static $functions = [];
}

A::$functions['function1'] = function($echo) {
    echo $echo;
};

A::$functions['function1']("hello world");

类成员变量称为“属性”。你也可以看到它们 指使用其他术语,如“属性”或“字段”,但 在本参考中,我们将使用“属性”。他们是 通过使用关键字public、protected或private之一定义, 后跟一个普通变量声明。本声明可以 包括初始化,但此初始化必须是常量 值——也就是说,它必须能够在编译时进行计算,并且 必须不依赖运行时信息才能进行评估


当我使用PHP7运行这个程序(PHP5也会出错)时,我得到一个错误,基本上是说不允许实例化类变量时使用表达式。这就是它的工作原理:

$functions = array(
    'function1' => function($echo) {
        echo $echo;
    }
);

$functions['function1']("hello world");
// Works

//----------

class A {
    public static $functions = [];
}

A::$functions['function1'] = function($echo) {
    echo $echo;
};

A::$functions['function1']("hello world");

类成员变量称为“属性”。你也可以看到它们 指使用其他术语,如“属性”或“字段”,但 在本参考中,我们将使用“属性”。他们是 通过使用关键字public、protected或private之一定义, 后跟一个普通变量声明。本声明可以 包括初始化,但此初始化必须是常量 值——也就是说,它必须能够在编译时进行计算,并且 必须不依赖运行时信息才能进行评估


在Windows或Linux上运行代码时出现相同错误。Windows上的PHP版本5.6.30 Linux上的PHP版本5.5.9在PHP中是不允许的。只能在初始定义中将基本值指定给类变量。但是,您可以在函数中设置它的闭包,例如在
a::prepare()
方法中,设置
self::$functions['function1']=function($echo){echo$echo;}。类变量必须初始化为常量表达式,至少在5.x中是这样。在Windows或Linux上运行代码时出现相同错误。Windows上的PHP版本5.6.30 Linux上的PHP版本5.5.9在PHP中是不允许的。只能在初始定义中将基本值指定给类变量。但是,您可以在函数中设置它的闭包,例如在
a::prepare()
方法中,设置
self::$functions['function1']=function($echo){echo$echo;}。类变量必须初始化为常量表达式,至少在5.x中是这样。因为PHP的OO支持是基于类的,所以您应该在构造函数中而不是在类定义之后实例化::$函数。因为PHP的OO支持是基于类的,所以您应该在构造函数中而不是在类定义之后实例化::$函数。