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支持是基于类的,所以您应该在构造函数中而不是在类定义之后实例化::$函数。