2012-03-09 18 views
2

Possible Duplicate:
Syntax error while defining an array as a property of a classPHP静的変数の初期化

私は、次の操作を実行しようとしている:

final class TestClass { 
    public static $myvar = 10*10; //line 3 
    //rest of code... 
} 

が、私はこのエラーを取得しています:syntax error, unexpected '*', expecting ',' or ';' [line 3]

は、なぜこれが可能ではないでしょうか?もちろん、もし私が10 * 10から100に変えれば、すべてがうまくいく。 数学計算で静的変数を初期化することはできませんか?何とかできない?

+1

のthatsだと思います静的ゲッター関数を作成することができます:http://stackoverflow.com/a/7785213/1335996 –

+0

PHP 5.6では 'static'はスカラー式を使用することができますので、あなたの質問のコードは完全にworですPHP> = 5.6のkableスカラー式は、数学、ビット単位、論理、連結、三項演算子および比較演算子と組み合わせた整数、浮動小数点数、文字列および定数を含むことができる。 たとえば、以下の定義がクラス内で正しくなりました: 'public static $ bar ="このクラス名は ".__ CLASS __;' 'public static $ baz = 8 >> 1;' 'public static $ bat = 10 + 3 * 2; –

答えて

9

ありません、それは静的/非静的初期化で何もすることはできません。単純な変数(protected $ _value = 10;)または配列(protected static $ _arrr = array( "key" => "value"))のみを設定できます。

静的メソッドの初期化と$ _isInitialized静的フィールドを作成して、クラスを再初期化する前に確認することができますが、何らかの理由でInitializeメソッドを呼び出す必要があります(コンストラクタ、同じ工場実装など)。

2

いいえクラスのプロパティ(静的なものでも)は、式ではなく値で初期化することのみが許可されています。 PHPのドキュメント

Like any other PHP static variable, static properties may only be initialized using a literal or constant; expressions are not allowed. So while you may initialize a static property to an integer or array (for instance), you may not initialize it to another variable, to a function return value, or to an object.

2

から

5

私は、あなたがこの

final class TestClass { 
    public static $myvar = null; //line 3 

    public static function init() { 
    self::$myvar = 10*10; 
    } 
    //rest of code... 
} 

のようなあなたのクラスに静的なinitメソッドを作成し、最初にこの

TestClass::init(); 

のように初期化を呼び出す必要があります代わりに、静的ウェイ

関連する問題