我的场景的 if/else 条件的缩写形式

Short form of if/else condition for my scenario

我想知道我的 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 

试试三元运算符是PHP。

代码如下:

$name = isset($_POST['name']) ? $_GET['name'] : '';
  • strlen检查是多余的;如果该值不存在,则分配一个空字符串,那么为什么检查 strlen 最坏的情况是它仍然是一个空字符串?
  • 你永远不应该使用 addslashes 做任何事;我真诚地怀疑您是否处于使用它有意义的极其罕见的情况之一。

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

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

如果绝对必要,可以用 addslashes 包裹该表达式;在最坏的情况下,它对空字符串进行操作,而空字符串根本不执行任何操作。

对于 PHP < 7,这会很好:

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

如何处理 $flag 有点神秘,因为您没有指定默认大小写。 假设 $flag 应该是 truthy$name 不为空时……为什么它首先存在?只需检查$name是否为空即可,无需为此并行维护第二个变量

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

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