0

在 PHP 中使用这样的结构是否安全:

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

我有 JS 的背景,使用起来很安全,因为我们可以信任真/假值。然而,我的同事习惯于使用isset

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

这对我来说似乎有点冗长。

在 phabricator.com 上找到了一篇文章,其中概述了 PHP 中不同的真/假值,并提供了这个表格:

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

第二件事:

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
于 2013-08-30T11:35:31.997 回答
1

线

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

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

|| 如果您的 if 中有多个条件,并且即使其中一个 pf 为真,则使用该条件,它就会为真。

?: 是一个三元运算符

于 2013-08-30T11:26:30.260 回答
1

如果你想要一个数组中的随机值,你可以使用array_rand(),但是如果你想要一个基于条件的值,你应该使用三元运算符:

$filename = (condition) ? what_happens_if_true : what_happens_if_false;
于 2013-08-30T11:31:57.063 回答
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'];

于 2013-08-30T11:39:15.617 回答