1

しばらくPHPを使用していませんでしたが、次のようなことを試しました:

<?php

class Something {
    public $x = 2 * 3;   // (line 4)
}

このコードは、次のエラーをトリガーします。

[2013 年 2 月 13 日水曜日 17:43:56] [エラー] [クライアント 127.0.0.1] PHP 解析エラー: 構文エラー、予期しない '*'、',' または ';' が必要です /var/www/problem.php の 4 行目

PHPのドキュメントによると

この初期化は定数値でなければなりません。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

したがって、ドキュメントによると、私のコードは機能するはずです。私がここに欠けているものはありますか?

4

4 に答える 4

8

クラスのメンバーを宣言するとき、それらに値を割り当てることはできますが、数学や関数呼び出しなどの複雑な操作を行うことはできません。

<?php

class Something {
    public $x = 2 * 3;   // (line 4)
}

次のことができます。

<?php

class Something {
    public $x = 6;   // (line 4)
}

したがって、あなたの場合、代わりにコンストラクターでその値を初期化する必要があります。

<?php

class Something {
    public $x; 

    public function __construct() 
    {
        $this->x = 2 * 3;
    }  
}
于 2013-02-13T15:52:15.173 に答える
3

例でリンクしたドキュメントを実際に注意深く読むと、これは許可されていないことが明確に示されています。

class SimpleClass
{
    // invalid property declarations:
    // (some examples here)
    public $var3 = 1+2;
}

これは、乗算も機能しないことを意味します。

于 2013-02-13T15:53:17.563 に答える
2

したがって、ドキュメントによると、私のコードは機能するはずです。

いいえ

ドキュメントには、「コンパイル時に評価できる必要があり、実行時の情報に依存してはならない」と明確に記載されています。

2 * 3実行時評価です。

public $x = 6;動作するはずです。

于 2013-02-13T15:52:24.713 に答える
0

実行時評価2 * 3は許可されていません。

DOCSが言うように

この宣言には初期化が含まれる場合がありますが、この初期化は定数値である必要があります。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

于 2013-02-13T15:53:30.917 に答える