2012-01-22 9 views
0

私は好奇心がPHPの省略形の設定を書く方法です。コードを書く私の主なクエストは、可能な限りタイトにすることですし、私は次のような面倒だと思う:PHPで簡潔なセッターを書く方法は?

$value = "Which array do I go in?"; 
if(true) 
    $arr_1[] = $value; 
else 
    $arr_2[] = $value; 

はそれを書くための良い方法はありますか?私は省略形を使用しようとしました:

(true)?$arr_1[]:$arr_2[] = "Which array do I go in?"; 

しかし、それは動作していないようです。誰もがこのような状況のためのクールなトリックを持っていますか?

ありがとうございます!

+5

これはちょうど非常に醜いです! – ThiefMaster

+0

'$ cond == true? $ arr ['first'] [] = $ value:$ arr ['second'] [] = $ value; '多分?なぜ最初に2つの異なる変数が使われるのですか? –

+2

タイトと効率的に混同しないでください...通常タイトとは、効率の良いコードを意味します。ソースファイル内にできるだけ少ない文字を意味するものではありません。 –

答えて

1

別のオプション(たとえば、グローバルを使用できない/したくない場合)。

${$cond?'arr_1':'arr_2'}[] = $value; 
5

あなたがしようとしていることの略語はありません。また、コードを「可能な限り緊密に」作成することは、しばしば読みやすさを犠牲にしています。

編集:あなたがしたいことをするためにいくつかの醜いハックがありますが、私は強く反対するでしょう。例えば:

$GLOBALS[cond ? 'varname1' : 'varname2'] = $value; 
+0

+1は醜いハッキングのためだけでなく、それらに対して推薦する。 – Bojangles

+0

どのようにこの恐ろしいことが45分で6 upvotesを取得しましたか? –

+0

私はテオドールに同意します。ニオイ・ピカピではありませんが、 "GLOBALS"を使用するのは嫌ですか? – thiesdiggity

3

別のハックは、次のようになります。

$arr = ($cond ? &$arr_1 : &$arr_2); 
$arr[] = 'Which array do I go in'; 

それは二行だが、それは世界的な必要とせず、機能に働くだろう。しかし、読みやすさのためにはif文を使用するほうが良いでしょう。 (注:&が変数を参照しているため、これが機能します)。もう一つ(あなたは三項演算子がどのように機能するかを理解させる可能性があります)、次のようになります?

$cond ? $arr_1[] = $value : $arr_2[] = $value; 

あなたは真の場合の右側に(のみ評価さ三項演算子は、成功した評価の(コードパスを実行します)を参照してください、右側の:falseの場合)。しかし、もしあなたが間違っている場合には 'これを使う'よりも速いと思うなら、あまり「タイトな」コードは実際には betterを実行します。

+0

+1のパフォーマンスは実際には遅い – thiesdiggity

関連する問題