我的场景的 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);
我想知道我的 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);