请考虑以下事项:
$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function.
但是,只要我将$var
标记为static
,
static $var = 'foo' . 'bar';
PHP(WAMP设置上的5.3.1)抱怨以下错误:
解析错误:语法错误,意外'。',期待','或';'
字符串连接似乎是罪魁祸首。
这里发生了什么?有人可以向我解释静态变量的规则吗?
答案 0 :(得分:12)
手册说明了 Variables scope :
尝试为这些[static]变量赋值,这些变量是表达式的结果,将导致解析错误。
在 Static keyword :
中也提到了它与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化;表达式是不被允许的。
虽然应该注意,无论是静态还是非静态属性都不能使用表达式初始化。
答案 1 :(得分:4)
您无法在初始值设定项中执行表达式。但是,你可以这样做:
define('FOOBAR', 'foo'.'bar');
static $var = FOOBAR;
echo $var;
鲜为人知的事实是,即使初始化程序不能包含运行时表达式,它也可以包含可在运行时定义和解析的常量。常量必须由首次使用$var
的时间来定义,否则您将获得与常量相同的字符串(例如"FOOBAR"
)。
答案 2 :(得分:1)
我这样做:
class MyClass {
static $var1;
static $var2;
public static function _init() {
self::$var1 = 'slkslk' . 'sksks' . 'arbitrary' ;
self::var2 = <<<EOT
<root>
<elem1>skjsksj</elem1>
</root>
EOT;
}
}
MyClass::_init();