Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 奇怪的错误:“;不能';t find constant Logger::DEBUG“;在Laravel中使用独白时_Php_Laravel_Monolog - Fatal编程技术网

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的有益解释