php静态变量初始化

时间:2012-03-09 12:13:29

标签: php oop

  

可能重复:
  Syntax error while defining an array as a property of a class

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

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

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

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

4 个答案:

答案 0 :(得分:9)

来自php docs

  

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

答案 1 :(得分:5)

我认为你必须像你这样在你的类上创建一个静态的init方法

final class TestClass {
    public static $myvar = null; //line 3

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

并首先像这样调用init

TestClass::init();

那就是静态方式

答案 2 :(得分:2)

没有。类属性(甚至是静态属性)只允许通过值而不是表达式初始化。

答案 3 :(得分:2)

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

您可以在重新初始化类之前创建az Initialize静态方法和$ _isInitialized静态字段,但是您必须以某种方式调用Initialize方法(在构造函数中,相同的工厂实现等)。