在PHP中使用这样的结构是否安全:
$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
我很感激有人在这件事上给我见解。
答案 0 :(得分: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行代码可以写成一行。这里没有详细说明。智能编码。
第三件事:
这是理想的做法。
return isset($file['filename2'])?$file['filename2']:$file['filename1'];
了解的样本:
echo (age>18)?"where is my beer":"you are Underage!!!"; //codition:true:false
答案 1 :(得分:1)
行
$filename = 'filename'. (isset($file['filename2']) ? '2' : '1');
与
相同if(isset($file['filename2']){
$filename='filename2';
}else{
$filename='filename1';
}
||如果你在if中有多个条件,如果它们是真的,那么它就是真的,这是真的。
?:是三元运算符
答案 2 :(得分:1)
如果你想要一个数组中的随机值,你可以使用array_rand(),但是如果你想要一个基于条件的值,你应该使用三元运算符:
$filename = (condition) ? what_happens_if_true : what_happens_if_false;
答案 3 :(得分:1)
使用
$filename = $file['filename1'] || $file['filename2'];
如果未设置$file['filename1']
,您将收到错误,例如Undefined index: filename1'
,因为(OR)运算符将首先检查第一个语句。
但是,如果设置了$file['filename1']
,但$file['filename2']
未设置,则返回值1
并且不会抛出任何错误,但您的代码仍然不正确。
所以,你会想要isset
方式,或者使用(如VAGABOND指出的那样):
$filename = $file['filename1'] || $filename =$file['filename2'];