我的方案的if / else条件的简短形式

时间:2017-06-21 12:30:30

标签: php variables if-statement conditional

我想知道这个我的php if / else条件的简短形式。

if(isset($_POST['name']) && strlen($_POST['name']) > 0)
{
    $name = addslashes($_POST['name']);
}
else
{
    $name = '';
    $flag = '0';
}

我做了这个..但这对$flag

无效
$name = (isset($_POST['name']) && strlen($_POST['name']) > 0 ? addslashes($_POST['name']) : ''); // returns true 

2 个答案:

答案 0 :(得分:0)

  • strlen检查是多余的;如果值不存在,则指定一个空字符串,那么为什么要检查strlen什么时候最坏的情况下它是一个空字符串?
  • 你永远不应该使用addslashes来做任何事情;我真诚地怀疑你是否处于使用合理的极为罕见的情况之一。

鉴于这两件事,让我们使用PHP null-coalescing operator

$name = $_POST['name'] ?? '';

如果你绝对必须,你可以围绕该表达式包裹addslashes;在最坏的情况下,它操作的空字符串根本不做任何事情。

对于PHP< 7,这样做很好:

$name = filter_input(INPUT_POST, 'name') ?: '';

如果你没有指定默认情况,如何处理$flag有点神秘。 假设<{em> $flag$name不空的时候应该 truthy ...为什么它首先存在?只需检查$name的空虚,无需为此并行维护第二个变量。

假设 $flag可能已经 falsey 并独立于$name的值行事,并使用布尔值代替数字字符串值,您可以将其缩短为:

$flag = $flag && strlen($name);

答案 1 :(得分:-1)

尝试三元运算符是PHP。

代码如下:

$name = isset($_POST['name']) ? $_GET['name'] : '';