18

次の点を考慮してください。

$var = 'foo' . 'bar'; # Not a member of a class, free-standing or in a function.

ただし、$varとしてマークするとすぐに:static

static $var = 'foo' . 'bar';

PHP (WAMP セットアップの 5.3.1) で次のエラーが発生します。

解析エラー: 構文エラー、予期しない「.」、「,」または「;」が必要です

ここでは、文字列の連結が原因のようです。


何が起きてる?誰かが静的変数のルールを説明してくれませんか?

4

3 に答える 3

12

マニュアルには、変数スコープでの記述があります。

式の結果であるこれらの[静的]変数に値を割り当てようとすると、解析エラーが発生します。

静的キーワードにもそれについての言及があります:

他のPHP静的変数と同様に、静的プロパティはリテラルまたは定数を使用してのみ初期化できます。式は許可されていません。

プロパティは、静的であるかどうかに関係なく、式を使用して初期化することもできないことに注意してください。

于 2011-02-12T06:43:50.433 に答える
4

イニシャライザで式を実行することはできません。ただし、これを行うことはできます。

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

あまり知られていない事実は、初期化子に実行時式を含めることはできなくても、実行時に定義および解決できる定数を含めることができるということです。ただし、定数は最初に使用される時間までに定義する$var必要があります。そうしないと、定数と同じ文字列が取得されます(例"FOOBAR")。

于 2011-02-12T06:49:18.850 に答える
1

私はこれをします:

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();
于 2012-05-13T04:19:15.190 に答える