公共静态变量值
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---静态方法和静态变量以及静态方法)