【发布时间】:2014-07-08 07:30:06
【问题描述】:
这行中的?:是什么意思?
$_COOKIE['user'] ?: getusername($_COOKIE['user']);
谢谢。
【问题讨论】:
标签: php operator-keyword
这行中的?:是什么意思?
$_COOKIE['user'] ?: getusername($_COOKIE['user']);
谢谢。
【问题讨论】:
标签: php operator-keyword
它是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'] 为empty 时,它才会触发else。所以getusername()里面的参数也有点空。
【讨论】:
$username = $_COOKIE['user'] ?: getusername($_COOKIE['user']);。这是否意味着if($_COOKIE['user']) { $username = $_COOKIE['user']; } else { $username = getusername($_COOKIE['user']); }?
$a = $b ?: $c; 将在所有情况下将$a 设置为等于$b 或$c,但$a = ($b > 5) ?: $c; 然后$a 将永远等于true 或$c 而永远不会等于$b。这是一个微妙的细微差别。
$var = isset($something) ?: $something 一样使用它,我会得到if (isset($result)) { $var = $result } else { $var = false; }。回到为我使用$var = isset($something) ? $something : null...:
是php的简写,例如:
(true == true ? echo "this is true" : "this is false")
写出这意味着:
if (true == true) {
echo "This is true";
}
else {
echo "This is false";
}
在您的示例中,只有一个 else 语句。
【讨论】:
它被称为三元运算符,类似于通常所说的内联 if。比如下面两个例子:
a)$genderString = $genderAbbreviation == "M" ? "Male" : "Female";
b)
if ($genderAbbreviation == "M")
{
$genderString = "Male";
}
else
{
$genderString = "Female";
}
这两者的效果是一样的。问号之前的语句被评估为真或假,如果为真则执行冒号之前的语句,如果为假则执行冒号之后的语句。
有关更多信息,您可以查看 PHP 文档下一页上标题为“三元运算符”的部分:
http://www.php.net/manual/en/language.operators.comparison.php
【讨论】:
如果存在$_COOKIE['user'] 值,则NULL 否则getusername($_COOKIE['user'] 将起作用
它是php中的三元运算符
【讨论】: