Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的静态函数变量和连接_Php_String_Concatenation_Static Variables - Fatal编程技术网

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开始用于编译时计算。这意味着如果需要连接任何东西,我必须将每一个东西定义为常量?这意味着每一个初始化将采取两个步骤?不是每一个步骤,只是需要使用表达式的步骤。”。