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

jkl*_*ers 18 php string concatenation static-variables

考虑以下:

$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function.
Run Code Online (Sandbox Code Playgroud)

然而,只要我标记$varstatic:

static $var = 'foo' . 'bar';
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

net*_*der 12

手册说明,在变量范围内:

尝试为这些[static]变量赋值,这些变量是表达式的结果,将导致解析错误.

Static关键字中也提到它:

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

虽然应该注意,不能使用表达式初始化属性(静态或非静态).


Sta*_*asM 5

您不能在初始值设定项中执行表达式。但是,您可以这样做:

define('FOOBAR', 'foo'.'bar');
static $var = FOOBAR;
echo $var;
Run Code Online (Sandbox Code Playgroud)

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