【发布时间】:2021-11-25 15:41:50
【问题描述】:
我试图通过函数发送一个数组,但我只得到Uncaught TypeError: Psr\Log\AbstractLogger::error(): Argument #2 ($context) must be of type array, string given, called in...。我正在使用KLogger,因此我可以在我的网站上记录重要的内容,有时,将内容放入数组中有时会非常有用。
这是我的代码中所有内容的样子:
function logger($string, Array $array, $type = 'info') {
global $filename, $filename_get; # these variables contains the filename and GET that the visitor are currently at
$dir = '/destination/somewhere/on-the-server';
if(!file_exists($dir)) {
create_folder($dir); # a function that creates a new folder if it doesn't exists
}
$logger = new Katzgrau\KLogger\Logger($dir);
if($type == 'emergency') {
$logger->emergency($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'alert') {
$logger->alert($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'critical') {
$logger->critical($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'error') {
$logger->error($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'warning') {
$logger->warning($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'notice') {
$logger->notice($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'info') {
$logger->info($string.' - '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
} elseif($type == 'debug') {
$logger->debug($string.' '.$filename . ($filename_get == '-' ? null : '?'.$filename_get), (empty($array) ? $array : ''));
}
}
logger('regular string', [
'test' => 'hi'
], 'error');
我已经尝试了“一切”! Array $array、&$array 和 $array = []。我错过了什么?我该如何解决这个问题?
【问题讨论】:
-
不应该是
!empty($array) ? $array : ''吗? -
您的意思是在我的问题中的代码中的第 1 行?我试过了,但我得到了这个错误:
Parse error: syntax error, unexpected token "!", expecting variable in... -
请在此处提问之前提取minimal reproducible example。没有它,你的问题就跑题了。
-
我不能在这里做一个最小的可重现的例子,因为 KLogger 需要作曲家。如果我可以制作可重现的示例,我会的。
-
请注意,几乎所有分支中的代码都是重复的,这使得出错的可能性更大。一方面,'debug' 分支中的日志消息略有不同(' ' 作为分隔符,而不是 ' - ')。假设这是一个错误,有两种通用技术可以删除重复代码:1. 计算块前的参数并作为变量传递 2. 使用变量方法名称而不是分支 (
$logger->$type($string ...);)。