0

PHP で次のような構造を使用しても安全ですか。

$filename = $file['filename1'] || $file['filename2'];

私はJSのバックグラウンドを持っていますが、真実/偽の値を信頼できるので、これは安全に使用できます. しかし、私の同僚は以下を利用して構成することに慣れていissetます:

$filename = 'filename'. (isset($file['filename2']) ? '2' : '1');

私には少し冗長に思えます。

Phabricator.comで、PHP のさまざまな true/falsey 値の概要を説明し、次の表を提供している記事を見つけました。

VALUE             if()        empty()     isset()

null              false       true        false
0                 false       true        true
0.0               false       true        true
"0"               false       true        true
""                false       true        true
false             false       true        true
array()           false       true        true
EVERYTHING ELSE   true        false       true

この問題について私に洞察を与えてくれる人に感謝します。

4

4 に答える 4

3

初めにすること:

$filename = $file['filename1'] || $file['filename2'];  //incorrect syntax

する必要があります

$filename = $file['filename1'] || $filename = $file['filename2'];//depending on the condition

2番目のこと:

isset($file['filename2']) ? '2' : '1';

これは冗長なコードを置き換える省略表現です。

同じコードを次のように書くことができます:

if(isset($file['filename2']){
   $filename='filename2';
}else{
   $filename='filename1';
}

つまり、1 行に 4 行のコードを記述できます。冗長ではありません。スマートなコーディングです。


3番目のこと:

これが理想的な方法です。

return isset($file['filename2'])?$file['filename2']:$file['filename1'];

理解のためのサンプル:

echo (age>18)?"where is my beer":"you are Underage!!!"; //codition:true:false
于 2013-08-30T11:35:31.997 に答える
1

使用することで

$filename = $file['filename1'] || $file['filename2'];

が設定されていない場合、(OR) 演算子は最初のステートメントを最初にチェックするため、次の$file['filename1']ようなエラーが発生します。Undefined index: filename1'

ただし、$file['filename1']が設定されていても設定され$file['filename2']ていない場合、値1が返され、エラーはスローされませんが、コードは正しくないままになります。

したがって、あなたはisset道を行くか、(VAGABONDが指摘したように)使用したいと思うでしょう:

$filename = $file['filename1'] || $filename =$file['filename2'];

于 2013-08-30T11:39:15.617 に答える
1

この線

$filename = 'filename'. (isset($file['filename2']) ? '2' : '1');

と同じです

if(isset($file['filename2']){
   $filename='filename2';
}else{
   $filename='filename1';
}

|| if に複数の条件がある場合に使用され、1 つでも true の場合は true になります。

?: は三項演算子です

于 2013-08-30T11:26:30.260 に答える