2010-12-18 20 views
1

クラスに変数を作成するときにdefinesを使用できないのはなぜですか?これを過ぎるために私は何ができますか?あなたが唯一の定数式でプロパティを宣言することができOOPは変数にdefineを使用できません

Parse error: syntax error, unexpected '.', expecting ',' or ';'

+4

[定数](http://php.net/manual/en/language.constants.php)、 'define()'は定数を作る関数です。 – BoltClock

答えて

7

:私は次のエラーを与えること

class foo { 
    public $bar = FOO."bar"; 
} 

:このよう

(定義すると、テーブルの接頭辞(デシベル)です)。ここで、連結演算子は無効です(したがって、解析エラー)。FOO定数ではありません。

public $bar = FOO."bar"; 

これを逆にたどることは、代わりにコンストラクタで初期化することです。定数を使用して、文字列と連結することもできます。

class foo { 
    public $bar; 

    public function __construct() { 
     $this->bar = FOO."bar"; 
    } 
} 
+0

作品..ありがとう! – Marwelln

0

definesは使用できません。変数を初期化するときは演算子を使用できません。

1

あなたが値を初期化するコンストラクタを使用することができます。前述したように、あなたが値を動的にする必要がある場合、演算子を使ってクラス変数を定義することはできません

<?php 
define("FOO", "test"); 

class foo { 
    public $bar; 

    function __construct() 
    { 
     $this->bar = FOO . "bar"; 
    } 
} 

var_dump(new foo()); 
0

、代入は関数内で発生しなければなりません。

定数を使用する場合は、グローバルスコープで定数を定義する代わりにクラス定数を使用すると便利です。キーワードはconstで定義され、self::演算子を使用してアクセスします。あなたが他のコンテキスト内のクラスからの定数を使用することができますので、foo::BARが、defineで定義された定数としてグローバルスコープで自動的にありません。

class foo 
{ 
    const BAR = 'test'; 

    public $baz; 

    public function __construct() 
    { 
     $this->baz = self::BAR . 'bat'; 
    } 

} 

クラス定数も静的インスタンス外にアクセスすることができます。

$some_var = foo::BAR; 
echo $some_var; 
// output: test 
関連する問題