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

时间:2013-08-20 04:03:50

标签: php closures anonymous-function ternary-operator

我正在为基于PHP的文件管理器创建搜索功能。我收到此错误:'可捕获的致命错误:类Closure的对象无法转换为字符串'在以下行:

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查询的一部分。 $ started_files根据用户是否输入一个名称或之前的任何内容来匹配,从而确定是否在开头放置“OR”或“AND”。我有一种感觉,我不允许在三元表达式中包含匿名函数,但我该怎么做呢?

谢谢!

2 个答案:

答案 0 :(得分: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)
  );
}

答案 1 :(得分: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;
}

谢谢!