18

このことは私を大いに悩ませています。解析エラーが発生しています: 構文エラー、予期しない '.'、',' または ';' が必要です。この行で

public static $user_table = TABLE_PREFIX . 'users';

TABLE_PREFIX は定義関数によって作成された定数です

4

2 に答える 2

22

静的クラス プロパティはコンパイル時に初期化されます。定数の値は実行時までわからないため、静的クラス プロパティを初期化するときに定数TABLE_PREFIXを使用して文字列リテラルと連結することはできません。代わりに、コンストラクターで初期化します。

public static $user_table;

// Initialize it in the constructor 
public function __construct() {
  self::$user_table = TABLE_PREFIX . 'users';
}

// If you only plan to use it in static context rather than instance context 
// (won't call a constructor) initialize it in a static function instead 
public static function init() {
  self::$user_table = TABLE_PREFIX . 'users';
}

http://us2.php.net/manual/en/language.oop5.static.php

他の PHP 静的変数と同様に、静的プロパティはリテラルまたは定数を使用してのみ初期化できます。式は使用できません。したがって、静的プロパティを整数または配列 (たとえば) に初期化することはできますが、別の変数、関数の戻り値、またはオブジェクトに初期化することはできません。

PHP >= 5.6 の更新

PHP 5.6 では、式の限定的なサポートが導入されました。

PHP 5.6 以降では、const 式と同じ規則が適用されます。コンパイル時に評価できる場合、いくつかの限定された式が可能です。

于 2012-06-10T14:10:12.727 に答える
8

ドットは文字列連結演算子です。これはランタイム関数であるため、静的 (parsetime) 値の宣言には使用できません。

于 2012-06-10T14:10:20.940 に答える