PHP中的静态函数变量和连接

时间:2011-02-12 06:33:46

标签: php string concatenation static-variables

请考虑以下事项:

$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)抱怨以下错误:

  

解析错误:语法错误,意外'。',期待','或';'

字符串连接似乎是罪魁祸首。


这里发生了什么?有人可以向我解释静态变量的规则吗?

3 个答案:

答案 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();