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