番号

2011-07-16 29 views
0

私はこの質問には、(それがある場合は、少なくとも私はそれを見つけることができませんでした...)番号

最近、私が仕事を始めました前に頼まれているとは思わないより大きいプロジェクト(少なくともOOP(...私は関数、クラス、オブジェクトを意味します))では、私が通常使用するよりも、しかし、私の関数の引数は、狂気私を駆動する例えばされるべきで入力する内容変数:

<?php 
function uberFunc($myArgument){ 
    switch($myArgument){ 
     //Stuff 
    } 
} 
?> 

そして$myArgumentのみ応答の特定の数とすることができることを、この例では、言うことができます(すなわち、それはユーザが作成したではありません) 。たとえば、$myArgumentは、SQLがどのように順序付けられるか、または使用するハッシュを定義するか、または一部の事前定義された値リストを定義します。その後、case文は$myArgumentを何らかのアクション(mysql文字列を追加するか、文字列を特定の方法でハッシュする)に変換します。

tl; dr:関数の引数は、あらかじめ定義された値のセットの1つにすることができます。

私の質問は次のとおりです。文字列リテラル(switch-case文でデコードされる)または数字(switch-case文でもデコードされる)を使用する方がよいでしょうか?

現在、私は厄介なコードを作成するために開始されたフリップばたつきてきたので、私は1(文字列リテラルまたは数字)を選んだとし(私の知っていること)、それ

利点に固執したいです読みやすダイレクトinsertationは、あなたがあなたのSQLを整理する方法を決定する変数に渡す場合(つまり、あなたは0のような何かを行うことができます

  • 文字列リテラルを使用して

利点(私の知っていること)番号を使用する:(あなたがこれまでのコードのように作品を必要とする場合)

  • は数学で操作することができ
  • 私は、彼らがわずかに処理すると信じてより速く(違いはありません)

答えて

0

実際に私が実際に見ることができるのは、「可読性」だけです。あなたは$ myargumentには、文字列または整数であるかどうか動作します "SELECT * FROM main ORDER BY ".$myArgument これを持っている場合、変数は、SQLデータベースに「直接挿入」することができるか否かをについて

。ただし、SQLインジェクションやその他の利点を防ぐプリペアドステートメント(PDOなど)を使用する必要があります。

数値で操作できますか?

echo "3" + "4"; // Outputs 7 

PHPは、数学演算を行うときに、引用符付きの文字列を数値に変換します。

他人が言ったように、スピードの違いはかなり小さいです。

for ($i = 0; $i < 1000000; $i++) { 
    $var = "3" + "4"; // takes 0.207326889038 seconds 
} 

for ($i = 0; $i < 1000000; $i++) { 
    $var = 3 + 4; // takes 0.103585958481 seconds 
} 

確かに、2倍の長さですが、100万回の反復では0.1秒の差はありません。基本的に最初のことは、あなたが2番目のことをすることができればばかげていますが、読みやすさが向上すれば、スピードの違いはほとんどありません。

0

確かにあなたの機能が何をしようとしているかによって異なります。

2つの数字を一緒に追加する機能がある場合は、文字列を引数として渡すことはほとんど意味がありません。

あなたの関数はオブジェクトに作用する必要があります。その場合、そのオブジェクトを引数として渡します。

もちろん、文字列を受け入れる必要のある関数が常に存在します。

私が言っていることは、あなたのプロジェクトのすべての関数が文字列を引数として受け入れることは決してできないということです。

私は配列を関数に渡すので、あなたの戦略は確か私にとってはうまくいかないでしょう。

私は完全にあなたの質問を理解できなかった場合は謝罪します。

0

単純なスタンドアロンのファンクションがある場合は、おそらく文字列の引数が最適です。あなたは魔法の数字を思い出すのに苦労します。

しかし、最良の選択肢は定数です。可能な関数引数のそれぞれについてグローバル定数を定義するのが面倒になるかもしれませんが、それはクラスにとってはあまり考えられません。

class Foo { 

    const BAR = 1; 

    public function baz($arg) { 
     switch ($arg) { 
      case self::BAR : 
      ... 
     } 
    } 

} 

$foo = new Foo; 
$foo->baz(Foo::BAR);