-1

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 クエリを構築する一部です。$begun_files は、ユーザーが名前またはこれより前にあるものを入力したかどうかに基づいて、先頭に「OR」または「AND」を付けるかどうかを単純に決定します。三項式に匿名関数を含めることは許可されていないように感じますが、代わりにどうすればよいですか?

ありがとう!

4

2 に答える 2

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 に答える
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 に答える