2011-12-15 4 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"); 

Затем к ним доступ, не ставит свои имена в кавычках:

class Boo { 
    public function runScare() { 
     $this->nowScaring(FOO); // no quotes 
     $this->nowScaring(BAR); // no quotes 
    } 
    private function nowScaring($person) { 
     // And no need to "grab their values" -- this has already happened 
     echo "<br/>Query selected is: " . $person . "<br/>"; 
    } 
} 

Если по какой-то причине вы хотите получить значение константы и все, что у вас есть, это имя в переменной, вы можете сделать это с помощью функции 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(); 

Но я не думаю, что это хорошая идея, чтобы определить константы методы некоторого класса. И, конечно, в большинстве случаев вам не нужно извлекать свои значения по переменной.

 Смежные вопросы

  • Нет связанных вопросов^_^