闭包类的php对象无法转换为字符串


php Object of class Closure could not be converted to string

我正在为基于PHP的文件管理器创建一个搜索函数。我收到以下错误:"可捕获的致命错误:类闭包的对象无法转换为字符串":

if ($data->input_ext)
{
    $data_ext = ($begun ? ($data->input_logic ? ' OR ' : ' AND ') :
    function ()
    {
        $begun = true;
        return "";
    }) . 'ext = "' . $data->input_ext . '"';
    $data_string.= $data_ext;
}

这是构建SQL查询的部分内容$begun_files只是根据用户是否输入了名称或在此之前的任何内容来确定是否将"or"或"AND"放在开头。我有一种感觉,我不允许在三元表达式中包含匿名函数,但我应该怎么做呢?

谢谢!

不能使用匿名函数进行内联流控制;只需使用一个常规的if语句,不要回避在多行上写东西:

if ($data->input_size) {
  if ($begun_files) {
      $str .= $data->input_logic ? ' OR ' : ' AND ';
      $begun_files = true;
  }
  $str .= sprintf('size %s "%f"',
      $data->input_size_op ? '<=' : '>=',
      $data->input_size * pow(1024,$data->input_size_unit)
  );
}

在上一个答案的基础上,我最终选择了

if ($data->input_ext) { 
    if ($begun) { $logic = $data->input_logic ? ' OR ' : ' AND '; } else { $logic = ""; $begun = true; }        
    $data_ext = $logic.'ext = "'.$data->input_ext.'"'; $data_string .= $data_ext;
}
if ($data->input_size) { 
    if ($begun) { $logic = $data->input_logic ? ' OR ' : ' AND '; } else { $logic = ""; $begun = true; }
    $data_size = $logic.'size '.($data->input_size_op ? '<=' : '>=').' '.($data->input_size * pow(1024,$data->input_size_unit)); $data_string .= $data_size;
}

谢谢!