2017-03-07 14 views
0

私はそれが奇妙な質問ですけど、私は、静的メソッドを持っているが、このように宣言:PHP - 引数を渡して、同じ行にあらかじめ変換しますか?

public static function getCountForTypesByModificationYear($year, $filter = null) { 
    $filter["modification year"] = $year; 
    return self::getCountForTypes($filter); 
} 

これは、引数(年)と、必要に応じて、追加のフィルタリングオプションを持つ連想配列をとります。最初の行は$filter配列に1つのmodification yearキー(私が最初の引数として提供している)を1つだけ持っていることを保証し、2番目の行は選択したフィルタの潜在的な結果をカウントするSQLクエリでメソッドを起動します。

彼らはかなり自己説明、私の目的のためにシンプルだが、私はarray_merge_recursive()またはcall_user_func()などの機能に頼るなしワンライナーに次の2行を作るための方法があるかどうかを推測しようとしています。

これを減らすことはできますか?

答えて

1

あなたが気にすべてを1行でそれを作るためにある場合は、以下を試すことができます。

public static function getCountForTypesByModificationYear($year, $filter = null) { 
    return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null); 
} 

しかし、それがより良いパフォーマンスを賢明にするかどうかはわかりません。

また、あなたも行うことができ、

return self::getCountForTypes(["modification year" => $year] + $filter); 
+0

は、私はそれは私が二番目を試してみましょう、今持っている性能でOKです。ありがとう! :) –

+0

第2のアプローチは私が必要としたものです。すべてのテストケースでほぼ5%高速です!私はあなたにビールを借りている;) –

+0

私は助けることができたうれしい、乾杯:D –

1

これは、array_merge関数のような関数呼び出しによってのみ実行できます。あなたは$filterは、配列

であることを確認する必要があります - あなたは、タイプヒント「配列」を使用し、nullに $filterデフォルト値を設定しない場合は、右側のオペランドの値があなたの例でも

public static function getCountForTypesByModificationYear($year, $filter = null) 
{ 
    return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year])); 
} 

を返す($filter['xx']=123)よう 式

public static function getCountForTypesByModificationYear($year, $filter = null) 
{ 
    if(!is_array($filter)) throw new \InvalidArgumentException(); 
    return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year])); 
} 
関連する問題