使用动态变量名称在PHP中调用静态变量

时间:2018-07-03 17:48:32

标签: php hacklang

我正在尝试实现一个日志记录库,该库将从应用程序运行的环境中获取当前的调试级别:

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::级别?

更新:

我尝试使用$level = "INFO"并将${$level}更改为$$level。这些更改均无济于事。

但是,用$handler = new StreamHandler('/var/log/php/php.log', Logger::INFO);替换第24行,代码将按预期编译并运行。

变量本身被声明为here

PHP Version => 5.6.99-hhvm

2 个答案:

答案 0 :(得分:1)

所以答案是使用一个函数进行常量查找:

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

答案 1 :(得分:0)

<?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”