Php 奇怪的错误:“;不能';t find constant Logger::DEBUG“;在Laravel中使用独白时
我有一个简单的类,可以写入任何日志文件:Php 奇怪的错误:“;不能';t find constant Logger::DEBUG“;在Laravel中使用独白时,php,laravel,monolog,Php,Laravel,Monolog,我有一个简单的类,可以写入任何日志文件: use Monolog\Logger; use Monolog\Handler\StreamHandler; class Mylog { public function __construct($log, $level = 'debug') { $this->monolog = new Logger($log); $level = constant('Logger::'.strtoupper($level))
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
class Mylog
{
public function __construct($log, $level = 'debug')
{
$this->monolog = new Logger($log);
$level = constant('Logger::'.strtoupper($level));
$this->monolog->pushHandler(new StreamHandler(storage_path('logs/'.$log.'-'.date('Y-m-d').'.txt')), $level);
}
public function __call($method, $arguments)
{
$this->monolog->{$method}($arguments[0]);
}
}
这给了我一个错误:constant():找不到常量记录器::DEBUG
但是,在推送处理程序时,如果我将$level替换为simply Logger::DEBUG,它就会工作。当常量确实存在时,它为什么找不到它?字符串中的类名,如
常量()
函数的参数中的类名必须是完全限定的。当您执行Logger::DEBUG时,它会工作,因为类是use'd
,所以它解析为Monolog\Logger::DEBUG
,但在字符串中它只保留Logger::DEBUG
,而这显然不存在
因此,解决方案只是在字符串中使用完全限定名,即
$level = constant('Monolog\Logger::'.strtoupper($level));
有道理,谢谢@Seldaek的有益解释