可能重复:
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,一切正常。 是否不允许使用数学计算初始化静态变量?不可能以任何方式?
答案 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方法(在构造函数中,相同的工厂实现等)。