【问题标题】:php - Meaning of question mark colon operator [duplicate]php - 问号冒号运算符的含义[重复]
【发布时间】:2014-07-08 07:30:06
【问题描述】:

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

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

谢谢。

【问题讨论】:

标签: php operator-keyword


【解决方案1】:

它是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...:
【解决方案2】:

是php的简写,例如:

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

写出这意味着:

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

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

【讨论】:

    【解决方案3】:

    它被称为三元运算符,类似于通常所说的内联 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

    【讨论】:

      【解决方案4】:

      如果存在$_COOKIE['user'] 值,则NULL 否则getusername($_COOKIE['user'] 将起作用

      它是php中的三元运算符

      【讨论】:

      • 三元运算符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      相关资源
      最近更新 更多