-1

我正在为基于 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”放在开头。我有一种感觉,我不允许在三元表达式中包含匿名函数,但我应该怎么做呢?

谢谢!

4

2 回答 2

0

您不能将匿名函数用于内联流控制;只需使用常规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)
  );
}
于 2013-08-20T04:17:01.070 回答
0

基于先前的答案,我最终得到了这个:

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;
}

谢谢!

于 2013-08-20T04:29:55.347 回答