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)
然而,只要我标记$var为static:
static $var = 'foo' . 'bar';
Run Code Online (Sandbox Code Playgroud)
PHP(WAMP设置上的5.3.1)抱怨以下错误:
解析错误:语法错误,意外'.',期待','或';'
似乎字符串连接是这里的罪魁祸首.
这里发生了什么?有人可以向我解释静态变量的规则吗?
net*_*der 12
手册说明,在变量范围内:
尝试为这些[static]变量赋值,这些变量是表达式的结果,将导致解析错误.
在Static关键字中也提到它:
与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化; 表达式是不允许的.
虽然应该注意,不能使用表达式初始化属性(静态或非静态).
您不能在初始值设定项中执行表达式。但是,您可以这样做:
define('FOOBAR', 'foo'.'bar');
static $var = FOOBAR;
echo $var;
Run Code Online (Sandbox Code Playgroud)
鲜为人知的事实是,即使初始值设定项不能包含运行时表达式,它也可以包含可以在运行时定义和解析的常量。该常量必须在$var首次使用时定义,否则您将得到与该常量相同的字符串(例如"FOOBAR")。
| 归档时间: |
|
| 查看次数: |
6597 次 |
| 最近记录: |