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

时间:2014-05-20 07:01:51

标签: php operator-keyword

此行中的?:是什么意思?

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

谢谢。

4 个答案:

答案 0 :(得分:18)

这是if声明的简写。

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

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

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

但在此示例中,函数“getusername”可能无法正常工作,因为仅当else$_COOKIE['user']时才会触及empty。因此,getusername()内的参数也是空的。

答案 1 :(得分:2)

这是简写的php,例如:

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

写出这意味着:

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

在您的示例中,只有else语句。

答案 2 :(得分:2)

它被称为三元运算符,类似于通常所说的内联运算符。例如,以下两个例子:

a)$genderString = $genderAbbreviation == "M" ? "Male" : "Female";

b)中

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

这两者都具有相同的效果。问号前面的语句被评估为true或false,然后如果为true,则执行冒号前的语句,如果为false,则执行冒号后的语句。

有关详细信息,请查看PHP文档的以下页面上标题为“Ternary Operator”的部分:

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

答案 3 :(得分:0)

如果$_COOKIE['user']值存在,那么NULL其他getusername($_COOKIE['user']将起作用

这是php中的三元运算符