2011-12-15 18 views
1

定義済みの定数を別の関数で参照しようとしています。 私が得ているエラーは、定義されていない変数と、各FOOとBARの定数として定義された変数を参照しています。変数変数から定義済みの定数を呼び出す

class Boo { 
public function runScare() { 
    $this->nowScaring('FOO'); 
    $this->nowScaring('BAR'); 
} 
private function nowScaring($personRequest) { 
    define ('FOO', "test foo"); 
    define ('BAR', "test bar"); 
    $person = ${$personRequest}; 
    echo "<br/>Query selected is: " . $person . "<br/>"; 
} 
} 
$scare = new Boo; 
$scare->runScare(); 

答えて

7

定数は次のように、あなたのスクリプトの先頭に、一度だけ定義する必要があります

​​

何らかの理由で定数の値を取得したい場合は、変数にその名前がある場合は、constant関数を使用します。

define ('FOO', "test foo"); 

$name = 'FOO'; 
$value = constant($name); 

// You would get the same effect with 
// $value = FOO; 
012この特定のケースで

は、それがより良いフィットするかもしれないclass constantsのようになります。

class Boo { 
    const FOO = "test foo"; 
    const BAR = "test bar"; 


    public function runScare() { 
     $this->nowScaring(self::FOO); // change of syntax 
     $this->nowScaring(self::BAR); // no quotes 
    } 
    private function nowScaring($person) { 
     echo "<br/>Query selected is: " . $person . "<br/>"; 
    } 
} 
0

あなただけ一度定数を定義することができ、それらはグローバルに定義されます。 、それらにアクセスするために、次に

define ('FOO', "test foo"); 
define ('BAR', "test bar"); 

引用符で自分の名前を入れないでください:

0
class Boo { 
public function runScare() { 
    $this->nowScaring('FOO'); 
    $this->nowScaring('BAR'); 
} 
private function nowScaring($personRequest) { 
    if(!defined('FOO')){ 
     define ('FOO', "test foo"); 
    } 
    if(!defined('BAR')){ 
     define ('BAR', "test bar"); 
    } 
    $person = constant($personRequest); 
    echo "<br/>Query selected is: " . $person . "<br/>"; 
} 
} 
$scare = new Boo; 
$scare->runScare(); 

しかし、私はいくつかのクラスのメソッドで定数を定義するのは良いアイデアだと思います `tを。そして、もちろん、ほとんどの場合、それらの値を変数で取得する必要はありません。