我正在为基于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;
}
谢谢!