0

私は頭がおかしくなるような理解できない構文エラーによってブロックされています :/

表示されるエラーは、Parse error: syntax error, unexpected '.', expecting ',' or ';'

これは、次のコードです。

class FamillePieceControllerCore extends FrontController
{
    public $php_self = 'famille-piece.php';

    private $webservice_url = _CICERONE_CONNECT_BASE_URL_ . 'WSC003&P2=0';
}

where_CICERONE_CONNECT_BASE_URL_ は別のファイルで定義されています。

. 'WSC003&P2=0'コードを削除すると正常に動作します。

わかりません:/ 助けてくれてありがとう

PS:私はphp 5.3.8を使用しています

4

1 に答える 1

4

クラス プロパティを式 (連結など) で初期化することはできません。代わりに、コンストラクターでそれを行う必要があります。

class FamillePieceControllerCore extends FrontController
{
    public $php_self = 'famille-piece.php';

    private $webservice_url;
    public function __construct() {
      $this->webservice_url = _CICERONE_CONNECT_BASE_URL_ . 'WSC003&P2=0';
    }
}

ドキュメントから:

クラスのメンバー変数は「プロパティ」と呼ばれます。「属性」や「フィールド」などの他の用語を使用して参照される場合もありますが、この参照では「プロパティ」を使用します。publicこれらは、 、protected、またはのいずれかのキーワードを使用して定義されprivate、その後に通常の変数宣言が続きます。 

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

で定義された定数は実行時に定義されるため、プロパティが初期化されるコンパイル時にdefine()の値はわかりません。_CICERONE_CONNECT_BASE_URL_

それ以降の PHP バージョンの更新:

PHP 5.6 以降では、コンパイル時に評価できる限り、クラス プロパティの宣言で単純な式を使用できます。したがって、投稿された元のコードは、PHP 5.6 以降で正しくコンパイルおよび実行されます。関数呼び出しや変数補間など、ランタイム評価を必要とするものは、まだ許可されていません。

// This is okay in PHP 5.6+
public $property = SOME_CONST . " other stuff";

// This is still not possible since
public $property = strlen(SOME_CONST);
于 2012-04-13T15:35:58.140 に答える