これはうまくいかないコードです:PHPのクラス属性にクラス定数を使用するには?
class MyClass
{
const myconst = 'somevalue';
private $myvar = array(0 => 'do something with '.self::myconst);
}
クラス定数は「コンパイル時」には利用できませんが、実行時にのみ使用できます。誰か回避策を知っていますか? (定義は機能しません)
ありがとう
これはうまくいかないコードです:PHPのクラス属性にクラス定数を使用するには?
class MyClass
{
const myconst = 'somevalue';
private $myvar = array(0 => 'do something with '.self::myconst);
}
クラス定数は「コンパイル時」には利用できませんが、実行時にのみ使用できます。誰か回避策を知っていますか? (定義は機能しません)
ありがとう
問題をあなたは定数を使用していることはありませんが、式を使用していること。
クラスメンバ変数は「プロパティ」と呼ばれます。 (...)それらは、public、protected、privateのいずれかのキーワードを使用して定義され、その後に通常の変数宣言が続きます。この宣言には初期化、 が含まれていますが、この初期化は定数値でなければなりません。つまり、コンパイル時に評価できる必要があり、評価するためにランタイム情報に依存してはいけません。
この簡単な宣言、例えば、コンパイルされません(パースエラー):
class MyClass{
private $myvar = 3+2;
}
しかし、私たちは、むしろそれがすることを定数と連結した文字列よりも、単純な定数を使用するようにクラス宣言を変更した場合期待どおりに動作します。回避策あなたは、コンストラクタであなたのプロパティを初期化することができよう
class MyClass{
const myconst = 'somevalue';
public $myvar = array(0 => self::myconst);
}
$obj = new MyClass();
echo $obj->myvar[0];
:
class MyClass{
const myconst = 'somevalue';
public $myvar;
public function __construct(){
$this->myvar = array(0 => 'do something with '.self::myconst);
}
}
$obj = new MyClass();
echo $obj->myvar[0];
なおPHP 5.6と上記そうすることが可能です。
はhttps://secure.php.net/manual/en/migration56.new-features.phpを参照してください:
そのような定数やプロパティの宣言とデフォルトの機能として、PHPは以前に静的な値を期待文脈で数値と文字列リテラルおよび/または定数を含むスカラ式を提供することが可能になりました議論
もしあなたがCマクロのようなものを探しているのであれば、PHPはそのようには動作しません。さらに、「コンパイル時間」はありません。 PHPはインタプリタです。 – stillstanding
マニュアルを書いた人は、「コンパイル・タイム」があるという印象を受けているようです。 http://www.php.net/manual/en/language.oop5.properties.php –
PHP内部ではテキストコードをバイトコードに変換するので、「コンパイル時」(ソート)があります。 – Antoine