3

checkGlossarybool パラメーターとオプションのglossary配列を受け入れる関数があります。
それらの状態は直接結び付けられています。
bool が FALSE の場合、用語集は必要ありません。逆に、bool が TRUE の場合、常に必要です。

私には、これは次のように簡単に単純化できるようです。

// Current
function doSomething($param1, $param2, $checkGlossary=FALSE, $glossary=NULL){
    // blah blah blah
    if($checkGlossary)
        array_search($glossary[$param2]);
    // etc etc etc
}

... に:

// Proposed
function doSomething($param1, $param2, $glossary=FALSE){
    // blah blah blah
    if($glossary)
        array_search($glossary[$param2]);
    // etc etc etc
}


$glossary私の唯一の躊躇は、 ( boolまたはarray ) の型が予測できないという事実です。いくつかのベスト プラクティスのガイドライン
に反しない限り、私は気にしません。

考え?

4

2 に答える 2

2

is_array()とその種類を確認できますis_bool()

于 2013-03-06T23:00:38.873 に答える
2

mixed関数のパラメーターに PHP が呼び出すデータ型を指定することは、常に悪い考えです。パラメーターの型をチェックするには、関数に追加のコードが必要であり、明らかに非常に混乱する可能性があります。

おそらく、特別な場合の最も簡単な解決策は、用語集コードを使用するかどうかの指標として配列の長さを使用することです。用語集配列を使用しないことを宣言する方法が必要です。ですから、自問する必要があります: 用語集を使用する意味がないのはいつですか? もちろん空いてる時。したがって、フラグを取り除き、array()他のパラメーターのデフォルトとして定義することをお勧めします。

function doSomething($param1, $param2, $glossary=array()) {
    if (count($array) > 0) {
        // do your glossary code here
    }
    // all the other stuff goes here
}

私には、これは意味的に正しいようで、うまく機能します。

そこに何を構築しているのか正確にはわかりませんが、別の解決策は、すべてをクラスに入れ、用語集をインスタンス変数として持つことです。複数の関数呼び出しで用語集を使用できる場合。おおよそ次のようになります。

 public class SomeAccurateClassName {
     private $glossary = array();

     function setGlossary(array $glossary) {
         $this->glossary = $glossary;
     }

     function doSomething($param1, $param2) {
         if (count($array) > 0) {
             // do your glossary code here
         }
         // all the other stuff goes here
     }
 }

基本的に状態があることを考えると (用語集を使用するか、用語集を使用しないか)、それをクラス内にカプセル化することをお勧めします。

于 2013-03-07T07:04:19.083 に答える