php - 问号冒号运算符的含义

22

这行代码中的 ?: 是什么意思?

$_COOKIE['user'] ?: getusername($_COOKIE['user']);

谢谢。


http://www.php.net/manual/en/language.operators.comparison.php - Abhik Chakraborty
?: 表示三元运算符。 - user3470953
4个回答

31

它是一个 if 语句的缩写。

$username = $_COOKIE['user'] ?: getusername($_COOKIE['user']);

与...相同

if( $_COOKIE['user'] ) 
{
    $username = $_COOKIE['user'];
} 
else
{
    $username = getusername($_COOKIE['user']); 
}

查看测试套件请点击此处:https://3v4l.org/6XMc4

但在此示例中,函数'getusername'可能无法正常工作,因为它仅在$_COOKIE['user']为空时才会进入else分支。因此,getusername()内的参数也是空的。


如果这一行是 $username = $_COOKIE['user'] ?: getusername($_COOKIE['user']);。那是否意味着 if($_COOKIE['user']) { $username = $_COOKIE['user']; } else { $username = getusername($_COOKIE['user']); } - Lewis
我现在明白了。谢谢。 - Lewis
3
请注意三元操作符,它会根据条件的输出来设置变量的值。因此,当 $a = $b ?: $c; 时,无论如何 $a 的值将等于 $b$c,而在 $a = ($b > 5) ?: $c; 中,$a 只能够等于 true$c,永远不会等于 $b。这是一个棘手的细微差别。 - Tyler V.
啊,我以为我可以像这样使用 $var = isset($something) ?: $something,然后得到 if (isset($result)) { $var = $result } else { $var = false; }。只能回到 $var = isset($something) ? $something : null 了... :< - i336_
如果您想测试变量、数组键、对象参数等是否存在(与isset()empty()相同),如果不存在则分配另一个值,可以使用??运算符。例如:$myVar = $varNotExists ?? 'this will be the value of $myVar because $varNotExists does not exist'; - Gavin

2

这是PHP的简写形式,例如:

(true == true ? echo "this is true" : "this is false")

展开写就是:

if (true == true) {
    echo "This is true";
}
else {
    echo "This is false";
}

在你的例子中,只有一个else语句。

1

它被称为三元运算符,类似于通常称为内联if的东西。例如,以下两个示例:

a) $genderString = $genderAbbreviation == "M" ? "男" : "女";

b)

if ($genderAbbreviation == "M")
{
    $genderString = "Male";
}
else
{
    $genderString = "Female";
}

这两种方式的效果相同。问号前的语句被评估为真或假,如果为真,则执行冒号前的语句,如果为假,则执行冒号后的语句。
要了解更多信息,请查看PHP文档中以下页面上标题为“三元运算符”的部分。

http://www.php.net/manual/en/language.operators.comparison.php


0
如果$_COOKIE['user']的值存在,则返回NULL,否则将执行getusername($_COOKIE['user'])
这是PHP中的一个三元运算符

三元运算符。 - Jonathon Reinhart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接