2013-08-30 23 views
0

它是安全的在PHP中使用構造這樣的:PHP smart || (OR)運算符,就像在Javascript

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

我在JS背景,這是安全的使用,因爲我們可以相信truthy/falsey值。但是我的同事是用來利用isset結構:

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

這對我來說似乎有點冗長。

我發現an article on phabricator.com其中概述了在PHP中不同truthy/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

了''||和其他比較運營商在PHP將返回一個布爾值,它不會像在JavaScript中那樣行事。 –

+0

@ jeroen:希望你明白。接受答案,如果你認爲它值得.. –

回答

3

第一件事:

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

應該

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

第二件事:

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

這是一個速記它取代冗長的代碼。

相同的代碼可以被寫爲:

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

所以,4行代碼可以寫在一個line.Thats不verbose.Thats智能編碼。


三件事:

這是做它的理想方式。

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

樣品的理解:

echo (age>18)?"where is my beer":"you are Underage!!!"; //codition:true:false 
1

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

是相同

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

||如果你在你的if中有多個條件,並且如果他們是真的,那麼它就是真的。

的:是一個三元運算符

+0

你所建議的編輯是錯誤的。我做了什麼是正確的一些有效的原因..什麼是文件名1和文件名2.沒有.. ..沒有paranthesis ..正如我所說,我的答案是理想的OP要什麼.. –

1

如果你想從一個數組,你可以使用array_rand()隨機值,但如果你想基於條件的一個值,你應該使用三元運算:

$filename = (condition) ? what_happens_if_true : what_happens_if_false; 
1

通過使用

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

如果$file['filename1']沒有設置,你會收到一個錯誤,如因爲Undefined index: filename1'(或)操作員將首先檢查第一條語句。

但是,如果$file['filename1']已設置,但$file['filename2']不是,則將返回值1,並且不會拋出錯誤,但您的代碼仍然不正確。

所以,你想要去的isset方式,或使用(由VAGABOND爲指出):

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