在 PHP 中使用动态变量名称调用静态变量
Using Dynamic Variable Names to Call Static Variable in PHP
我正在尝试实现一个日志记录库,它会从应用程序运行的环境中获取当前调试级别:
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
。 None 这些更改有所帮助。
但是,将第 24 行替换为 $handler = new StreamHandler('/var/log/php/php.log', Logger::INFO);
,代码将按预期编译和运行。
变量本身被声明here
PHP Version => 5.6.99-hhvm
所以答案是使用函数进行常量查找:
$handler = new StreamHandler('/var/log/php/php.log', constant("Monolog\Logger::" . $level));
<?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”
我正在尝试实现一个日志记录库,它会从应用程序运行的环境中获取当前调试级别:
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
。 None 这些更改有所帮助。
但是,将第 24 行替换为 $handler = new StreamHandler('/var/log/php/php.log', Logger::INFO);
,代码将按预期编译和运行。
变量本身被声明here
PHP Version => 5.6.99-hhvm
所以答案是使用函数进行常量查找:
$handler = new StreamHandler('/var/log/php/php.log', constant("Monolog\Logger::" . $level));
<?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”