Использование имен динамических переменных для вызова статической переменной в PHP - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь реализовать библиотеку журналов, которая бы выбирала текущий уровень отладки из среды, в которой работает приложение:

23    $level = $_SERVER['DEBUG_LEVEL'];
24    $handler = new StreamHandler('/var/log/php/php.log', Logger::${$level});

Когда я делаю это, код завершается с ошибкой:

A valid variable name starts with a letter or underscore,followed by any number of letters, numbers, or underscores at line 24.

Как бы я использовал определенный уровень Logger:: таким образом?

UPDATE:

Я пытался получить $level = "INFO" и изменить ${$level} на $$level. Ни одно из этих изменений не помогло.

Однако, заменив строку 24 на $handler = new StreamHandler('/var/log/php/php.log', Logger::INFO);, код скомпилируется и запустится, как ожидается.

Сама переменная объявлена ​​ здесь

PHP Version => 5.6.99-hhvm

Ответы [ 2 ]

0 голосов
/ 03 июля 2018
<?php
class Logger {
  const MY = 1;
}

$lookingfor = 'MY';

// approach 1
$value1 = (new ReflectionClass('Logger'))->getConstants()[$lookingfor];
// approach 2
$value2 = constant("Logger::" . $lookingfor);

echo "$value1|$value2";
?>

Результат: "1 | 1"

0 голосов
/ 03 июля 2018

Так что ответом было использование функции для постоянного поиска:

$handler = new StreamHandler('/var/log/php/php.log', constant("Monolog\Logger::" . $level));

...