取自PHP manual:
与任何其他PHP静态变量一样,静态属性可能只是 使用文字或常量初始化;表达式是不允许的。 因此,您可以将静态属性初始化为整数或数组 (例如),你可能不会将它初始化为另一个变量,也就是a 函数返回值,或对象。
所以这意味着我不能做以下事情,因为a)表达式是不被允许的,b)不允许函数返回值。
class MyClass {
// I can't do this.
public static $var = 10 * 2;
// I can't do this.
public static $sum = array_sum( array( 3, 5, 6 ) );
}
但是,参考 b)函数返回值不允许,为什么当array()
是具有返回值的函数时,可以执行以下操作?
class MyClass {
// I can do this.
public static $array = array( 3, 5, 6 );
}
答案 0 :(得分:4)
array()
不是函数,它是初始值设定项。与普通函数不同,它在编译时被解释,因此可用于初始化静态函数。
作为参考,这是static
关键字后允许的内容:
static_scalar_value:
common_scalar (e.g. 42)
static_class_name_scalar (Foo::class)
namespace_name (Foo)
T_NAMESPACE T_NS_SEPARATOR namespace_name (namespace \Foo)
T_NS_SEPARATOR namespace_name (\Foo)
T_ARRAY '(' static_array_pair_list ')' e.g. array(1,2,3)
'[' static_array_pair_list ']' e.g. [1,2,3]
static_class_constant e.g. Foo::bar
T_CLASS_C (__CLASS__)
http://lxr.php.net/xref/PHP_5_5/Zend/zend_language_parser.y#945
Php 5.6增加了静态操作"到这个列表,只要这些表达式最终解析为静态标量,就可以将表达式用于静态。
class X {
static $foo = 11 + (22/11); // syntax error in 5.5, valid in 5.6
}
答案 1 :(得分:2)
一个好问题!简单的ansvar是array()
只有看起来就像一个函数,但实际上不是一个。
注意: array()是一种语言结构,用于表示文字数组,而不是常规函数。
答案 2 :(得分:-1)
因为数组不是函数。
虽然array(1,2)
看起来像是在调用一个名为array的函数,但是你没有进行任何排序。你只是创建一个数组,这是不是一个函数调用。它更接近于$a = 1
。