PHP中的静态函数变量和连接
考虑以下几点:PHP中的静态函数变量和连接,php,string,concatenation,static-variables,Php,String,Concatenation,Static Variables,考虑以下几点: $var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function. 一旦我将$var标记为静态,但是: static $var = 'foo' . 'bar'; PHP(WAMP设置上的5.3.1)出现以下错误: 分析错误:语法错误,意外“.”,应为“,”或“;” 这里的罪魁祸首似乎是字符串连接 这是怎么回事?有人能给我解释一下静态变量的规则吗?手动状态,在: 尝试将值分配给这些作
$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function.
一旦我将$var
标记为静态
,但是:
static $var = 'foo' . 'bar';
PHP(WAMP设置上的5.3.1)出现以下错误:
分析错误:语法错误,意外“.”,应为“,”或“;”
这里的罪魁祸首似乎是字符串连接
这是怎么回事?有人能给我解释一下静态变量的规则吗?手动状态,在: 尝试将值分配给这些作为表达式结果的[static]变量将导致解析错误 以下内容也提到了这一点: 与任何其他PHP静态变量一样,静态属性只能使用文本或常量初始化;不允许使用表达式
尽管需要注意的是,属性(静态或非静态)也不能使用表达式进行初始化。您不能在初始值设定项中使用表达式。但是,您可以执行以下操作:
define('FOOBAR', 'foo'.'bar');
static $var = FOOBAR;
echo $var;
鲜为人知的事实是,尽管初始值设定项不能包含运行时表达式,但它可以包含可以在运行时定义和解析的常量。常量必须在首次使用时定义,$var
,否则您将得到与常量相同的字符串(例如“FOOBAR”
)。我这样做:
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();
class-MyClass{
静态$var1;
静态$var2;
公共静态函数_init(){
self::$var1='slkslk'.'sksks'.'任意';
self::var2=这是为什么?我怎么能做这样的事情:公共静态$model\u path=APP\u path。“/models/”;
@Hafiz:你不能,因为它们是在编译时计算的。常量和字符串文本是在编译时计算的,所以静态$foo=“a”
或public$foo=CONSTANT;
有效。表达式,如public$foo=1+2;
或static$foo='a'。'b'
在运行时进行计算。在您的情况下,您可以简单地定义一个MODEL\u PATH
常量。执行以下操作:define('MODEL\u PATH',APP\u PATH.“models/))
然后在类中使用此常量:类Foo{public static$model\u path=model\u path;}
。要么这样,要么在构造函数或初始化方法中初始化它们。我感谢您的回复,但这样我每次在2个位置都会做一件事:|。可能我应该在所有使用静态变量和表达式的位置使用常量。请注意“从PHP5.6中,您可以为这些变量赋值,这些变量是表达式的结果……如果可以在编译时对其求值,则可以使用一些有限的表达式。“像1+2
和'a.'b'
这样的表达式可以从PHP5.6开始用于编译时计算。这意味着如果需要连接任何东西,我必须将每一个东西定义为常量?这意味着每一个初始化将采取两个步骤?不是每一个步骤,只是需要使用表达式的步骤。”。