2016-05-25 24 views
8

これはPHPに関する質問ですが、おそらく他の言語にも当てはまります。変数:if/elseを上書きする

どのような方法で変数の割り当てを処理できますか?

// Use default value and overwrite 
$var_one = 'x'; 
if ($var_two) { 
    $var_one = 'y'; 
} 

// Use complete if/else 
if ($var_two) { 
    $var_one = 'y'; 
} else { 
    $var_one = 'x'; 
} 

私は、ソフトウェアが最低レベルでどのように動作するかについて常に興味があります。

+1

できることはいくつかあります。最初は私のやり方です。また、 '$ var_one =($ var_two? 'y': 'x');'はオンライナーです – Thamilan

+3

どうすればいいですか?作家のため?リーダー?コンパイラ?主に意見に基づく質問です。 –

+0

@SamKuhmonenええ、良い質問です。私は主にここでパフォーマンスについて考えています。しかし、パフォーマンスが勝てば、読みやすさが本当のものになってしまうほど、誰もが好むものを知りたいと思っていました。 –

答えて

7

1つのプロセスが削除されるため、最初のプロセスを使用します。また、それは、第二の1よりもクリーンです:

$var_one = 'x'; 
if ($var_two) 
    $var_one = 'y'; 

それとも

$var_one = ($var_two ? 'y' : 'x'); 

上記のコードは私の#1の例よりもさらにクリーナーです。

+0

良い答え。 +1 – Pupil

+2

最初のプロセスはどのようにプロセスを削除しますか?パフォーマンス面では、2番目のプロセスではプロセスが削除されます。 –

+0

私が知っているように、もう1つのブロック(別のセクション)を実行する必要があります。コーディングブロックを削除するプロセスは、その実行プロセスを防ぐことができます。 –

1

どの変数にアクセスしているかによって異なります。

あなたがアクセスしている変数は、事前に移入された場合、あなたは、同じページに

$formValue = 'x'; 
if(isset($var_two)) { 
    $formValue = 'y'; 
} 
2

を変数を定義する必要がある場合、私は二番目の

if ($var_two) { 
    $var_one = 'y'; 
} else { 
    $var_one = 'x'; 
} 
を好む

if(isset($_POST['formValue'])) { 
    $formValue = $_POST['formValue']; 
} 
else { 
    $formValue = NULL; 
} 

例の下に使用します

私はそれがより読みやすく、より低いCPU消費者だと思うch時間。しかし、最初の1つでは、ifがtrueのときに2つの代入が実行されます。下位レベルのジャンプ動作は、両方の場合に匹敵するながら$var_twotrueと評価された場合、それが唯一の変数代入を行うよう

2

第2のオプションは、わずかに速い実際にあります。

if ($var2)のような条件が評価される場合は、falseのように多くのケースが考えられるので注意してください。 PHPマニュアルには、それを明確にするためにgreat pageがあります。

+0

私は 'isset'はここで使うのが良いと思います – JiteshNK

1

あなたが定義した方法は両方とも有効であり、良いです。もう1つの方法はternary operatorです。ここで

あなたは/他の場合は、ここであなただけ$var_twoに応じ$var_oneに値を割り当てる完全$var_two

$var_one = 'x'; 
if ($var_two) 
    $var_one = 'y'; 

用途に応じて「y」を別のものに割り当てられた変数をオーバーライドします。

if ($var_two) 
    $var_one = 'y'; 
else 
    $var_one = 'x'; 

私はあなたが、ternary operatorを使用してこれを行う例を参照してください、オーバーライドことができます言ったように。既存の変数。

$var_one = x; 
$var_one = ($var_two) ? 'y' : $var_one; 

再び、割り当て新しい値で変数。

$var_one = ($var_two) ? 'y' : 'x'; 

注:そのiが相互に比較する必要がどのようなコードに依存し、 は2つのタイプがあり、1が割り当てと別であるが、私はそれほど複雑場合ternary operatorを 好む必要があり、オーバーライドですストレートのいずれか 進む方法if.....else

+0

あなたの意見ではどちらが他のものより優れていますか? –

+0

そのコードに依存して、私はお互いを比較する必要があります。一つは代入であり、もう一つはオーバーライドです。複雑でなければ '三項演算子'を優先しなければなりません。 .else'。 –

関連する問題