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

Lew*_*wis 14 php operator-keyword

是什么?:在这条线是什么意思?

$_COOKIE['user'] ?: getusername($_COOKIE['user']);
Run Code Online (Sandbox Code Playgroud)

谢谢.

tri*_*izz 19

这是一个if声明的简写.

$username = $_COOKIE['user'] ?: getusername($_COOKIE['user']);
Run Code Online (Sandbox Code Playgroud)

是相同的

if( $_COOKIE['user'] ) 
{
    $username = $_COOKIE['user'];
} 
else
{
    $username = getusername($_COOKIE['user']); 
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处的测试套件:https://3v4l.org/6XMc4

但是在这个例子中,函数'getusername'可能不正确,因为else它只在$_COOKIE['user']is 时才会命中empty.所以,里面的参数getusername()也是空的.

  • 请注意三元运算符,您的变量将设置为条件的输出.因此,虽然`$ a = $ b?:$ c;`在所有情况下``$ a`将等于'$ b`或`$ c`,`$ a =($ b> 5)?:$ c ;`那么`$ a`只会等于'true`或`$ c`而永远不会是'$ b`.这是一个棘手的细微差别. (2认同)