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



我想知道我的phpif / 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 
  • strlen检查是多余的;如果该值不存在,则分配一个空字符串,那么当最坏的情况是空字符串时,为什么要检查strlen呢?
  • 你永远不应该addslashes用于任何事情;我真诚地怀疑你是否处于使用有意义的超级罕见情况之一。

鉴于这两件事,让我们使用 PHP 的 null 合并运算符:

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

如果你绝对必须这样做,你可以在该表达式周围包裹一个addslashes;在最坏的情况下,它在一个空字符串上运行,它根本不做任何事情。

对于 PHP <7,这会做得很好:

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

如何处理$flag有点神秘,因为您没有指定默认情况。$name不空时,$flag应该是真实的......它首先为什么存在?只需检查$name的空性,无需为此并行维护第二个变量。

但是假设$flag可能已经是假的并且独立于$name的值,并使用布尔值而不是数字字符串值,您可以将其缩短为:

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

尝试三元运算符是PHP。

代码将如下所示:

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

最新更新