Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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_Class_Variables_Static_Public - Fatal编程技术网

Php 公共静态变量值

Php 公共静态变量值,php,class,variables,static,public,Php,Class,Variables,Static,Public,我试图声明一个公共静态变量,它是一个数组数组: class Foo{ public static $contexts = array( 'a' => array( 'aa' => something('aa'), 'bb' => something('bb'), ), 'b' => array( 'aa' => somethi

我试图声明一个公共静态变量,它是一个数组数组:

class Foo{
 public static $contexts = array(
    'a' => array(
      'aa'              => something('aa'),
      'bb'              => something('bb'),
    ),

    'b' => array(
      'aa'              => something('aa'),
      'bb'              => something('bb'),
    ),

  );

 // methods here

 }

 function something($s){
   return ...
 }
但我有一个错误:

分析错误:分析错误,应为 `“)”在


声明类属性时不能使用表达式。也就是说,这里不能调用
something()
,只能使用静态值。在某些时候,您必须在代码中以不同的方式设置这些值

与任何其他PHP静态变量一样,静态属性只能使用文本或常量初始化;不允许使用表达式。因此,虽然可以将静态属性初始化为整数或数组(例如),但不能将其初始化为其他变量、函数返回值或对象

例如:

class Foo {
    public static $bar = null;

    public static function init() {
       self::$bar = array(...);
    }
}

Foo::init();

或者,如果要实例化该类,请在
\u构造中执行该操作。

什么是
something()
?另外,这是声明为类属性(
publicstatic$contexts
)还是在方法中的某个地方?这是一个普通函数。。它是在课堂外宣布的。变量被声明为类属性“在类之外声明”?我们能看到这段代码和类的其余部分在哪里吗?“在外面。”“类属性”。它是什么?请显示更完整的代码。我的意思是函数是在外部声明的,变量是公共静态的。。。在课堂上。我编辑了我的q以使它更清晰这很奇怪,因为我可以声明一个公共静态函数,它将返回我的数组,它将是相同的。在解析源代码时创建类属性的初始值。此时,需要为这些初始类值保留内存,因为它们需要存储在某个地方。这发生在代码实际执行之前。但是,您不能为函数的返回值保留内存,因为函数可能返回任何内容。由于解析还没有完成,函数还不能执行。因此,在解析代码时,只允许已知大小的静态值。函数稍后在运行时(显式)调用,并可能返回任何内容。