PHP 中的静态函数变量和串联

请考虑以下事项:

$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)报告出现以下错误:

解析错误:语法错误、意外的“.”、预期的“、”或“;”

看来字符串串联是这里的罪魁祸首。


这是怎么回事?有人可以向我解释静态变量的规则吗?


答案 1

手册在变量作用域中指出:

尝试为这些 [静态] 变量赋值(这些变量是表达式的结果)将导致解析错误。

Static关键字中也提到了它:

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

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


答案 2

不能在初始值设定项中执行表达式。但是,您可以执行以下操作:

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

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


推荐