公共静态变量值

Posted

技术标签:

【中文标题】公共静态变量值【英文标题】:Public static variable value 【发布时间】:2011-09-23 22:49:01 【问题描述】:

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

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()?另外,这是声明为类属性 (public static $contexts) 还是方法中的某处? 这是一个普通函数。它在类外声明。变量被声明为类属性 “在课外声明”?我们能看到这段代码在课堂上的其余部分在哪里吗? “外面。” “班级财产。”它是哪一个?请显示更完整的代码。 我的意思是函数是在外面声明的,变量是 public static ... 在类里面。我编辑了我的 q 以使其更清晰 【参考方案1】:

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

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

http://www.php.net/manual/en/language.oop5.static.php

例如:

class Foo 
    public static $bar = null;

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


Foo::init();

如果您要实例化该类,或者在 __construct 中执行此操作。

【讨论】:

这很奇怪,因为我可以声明一个将返回我的数组的公共静态函数,它会是一样的 类属性的初始值是在解析源代码时创建的。此时需要为这些初始类值保留内存,因为它们需要存储在某个地方。这发生在代码实际执行之前。但是,您不能为函数的返回值保留内存,因为函数可能会返回任何内容。而且由于解析还没有完成,所以还不能执行函数。因此,在解析代码时,只允许使用已知大小的静态值。稍后在运行时(显式)调用一个函数,并且可能返回任何内容。

以上是关于公共静态变量值的主要内容,如果未能解决你的问题,请参考以下文章

java基础(static---静态方法和静态变量以及静态方法)

通过java中不同类中的静态方法设置和获取静态变量值

MFC 随变量变化在不同静态编辑框输出变量值

如何更改 PHP 中的静态变量值?

lua如何实现 静态变量,多次调用同一个函数时,只初始化一次指定的变量值 没什么分,谢谢帮忙

面向对象之static关键字