2

これを試して:

$test = array (2+2);
var_dump($test);

次に、クラス内で同じことを試してください。

class test {
    public $test = array(2+2);
}

パーサーエラーが発生する理由と、これを (クラス内で) 可能な限りコードフレンドリーでパフォーマンスの高い方法で解決する方法を知りたいだけです。

4

2 に答える 2

5

ステートメントを使用してクラス フィールドを初期化することはできません。これはリテラル、定数値でなければなりません。回避策は、コンストラクターを使用することです。

class Test {
    public $test;

    public function __construct() {
        $this->test = array(2+2);
    }
}

マニュアルから:

クラスのメンバー変数は「プロパティ」と呼ばれます。「属性」や「フィールド」などの他の用語を使用して参照される場合もありますが、この参照では「プロパティ」を使用します。publicこれらは、 、protected、またはのいずれかのキーワードを使用して定義されprivate、その後に通常の変数宣言が続きます。この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

于 2012-05-11T21:58:09.037 に答える
1

その理由は、クラス内のプロパティへの割り当ては静的宣言でなければならないためです。評価される式にすることはできません。

それはあなたができることです:

public $test = array(4); // static assignment
public $test = 'some string'; // static assignment
public $test = strtoupper('  some string  '); // invalid, expression
public $test = $global_variable; // invalid, not a constant expression
public $test = time(); // invalid, an expression
于 2012-05-11T21:59:09.787 に答える