【问题标题】:Can't pass array through function, error: string given无法通过函数传递数组,错误:给定字符串
【发布时间】: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 ...);)。

标签: php arrays function


【解决方案1】:

您的代码中有错误。你的第二个参数是empty($array) ? $array : ''

如果$array 为空,则发送$array,但如果不为空,则发送空字符串。

应该是这样的empty($array) ? [] : $array

【讨论】:

  • 谢谢 :) 我完全错过了那个,只关注我问题中代码的第 1 行。
  • 我们都去过那里,比我们想承认的次数还要多。
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2014-09-06
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
相关资源
最近更新 更多