18

考虑以下:

$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function.

但是,一旦我标记$varstatic

static $var = 'foo' . 'bar';

PHP(WAMP 设置上的 5.3.1)抱怨以下错误:

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

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


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

4

3 回答 3

12

手册指出,在变量范围内

尝试将值分配给作为表达式结果的这些 [静态] 变量将导致解析错误。

Static 关键字中也提到了它:

与任何其他 PHP 静态变量一样,静态属性只能使用文字或常量进行初始化;不允许表达。

尽管应该注意,无论是否为静态属性,都不能使用表达式进行初始化。

于 2011-02-12T06:43:50.433 回答
4

您不能在初始化程序中执行表达式。但是,您可以这样做:

define('FOOBAR', 'foo'.'bar');
static $var = FOOBAR;
echo $var;

鲜为人知的事实是,即使初始化程序不能包含运行时表达式,它也可以包含可以在运行时定义和解析的常量。常量必须在$var第一次使用时定义,否则你会得到与常量相同的字符串(例如"FOOBAR")。

于 2011-02-12T06:49:18.850 回答
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();
于 2012-05-13T04:19:15.190 回答