关于oop:php静态变量初始化

php static variable initialization

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Syntax error while defining an array as a property of a class

我正在尝试执行以下操作:

1
2
3
4
final class TestClass {
    public static $myvar = 10*10; //line 3
    //rest of code...
}

但我得到了这个错误:syntax error, unexpected '*', expecting ',' or ';' [line 3]

为什么不可能?当然,如果我把10*10改成100,一切正常。不允许用数学计算初始化静态变量吗?以任何方式都不可能?


来自PHP文档

Like any other PHP static variable, static properties may only be initialized using a literal or constant; expressions are not allowed. So while you may initialize a static property to an integer or array (for instance), you may not initialize it to another variable, to a function return value, or to an object.


我认为您必须在类上创建一个静态init方法,如下所示

1
2
3
4
5
6
7
8
final class TestClass {
    public static $myvar = null; //line 3

    public static function init() {
    self::$myvar = 10*10;
    }
    //rest of code...
}

然后像这样先调用init

1
TestClass::init();

这是静态的方式


不,在静态/非静态初始化中不可能做任何事情。只能设置简单变量(protected$_value=10;)或构建数组(protected static$_arrr=array("key"=>"value"))。

在重新初始化类之前,可以创建az initialize静态方法和要检查的$u isinitialized静态字段,但必须以某种方式调用initialize方法(在构造函数、同一工厂实现等中)。


不允许。类属性(甚至静态属性)只能由值初始化,不能由表达式初始化。