2011-12-15 75 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

常量應僅一次定義,在腳本的頂部,這樣的:

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

然後,訪問他們,不要把自己的名字放在引號:

​​

如果由於某種原因想要獲得常數的值,並且您只需將其名稱存儲在變量中,則可以使用constant函數執行此操作:

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

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

// You would get the same effect with 
// $value = FOO; 

在這種特殊情況下,它看起來像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

只能定義常量一次,他們得到全局定義。

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(); 

但我不`噸認爲這是一個好主意,在某些類的方法來定義常量。當然,在大多數情況下,你不需要通過變量檢索他們的值。