理解php中的三元运算符

时间:2013-12-23 16:36:38

标签: php logic ternary-operator

我正在阅读其他人的代码,他们有这样的一行:

  $_REQUEST[LINKEDIN::_GET_TYPE] = (isset($_REQUEST[LINKEDIN::_GET_TYPE])) ? $_REQUEST[LINKEDIN::_GET_TYPE] : '';

我只想确保遵循这一点。我可能最终想出了它的逻辑。

这是对的吗?

如果设置了$_REQUEST[LINKEDIN::_GET_TYPE],则将其分配给自己。 (表示为无效条件)否则将其设置为空字符串。 (这意味着NULL(未定义)和“”在脚本的其他部分不会被视为相同。)

5 个答案:

答案 0 :(得分:6)

您发布的三元运算符就像一行if-else,如下所示

if (isset($_REQUEST[LINKEDIN::_GET_TYPE])) {
  $_REQUEST[LINKEDIN::_GET_TYPE] = $_REQUEST[LINKEDIN::_GET_TYPE];
} else {
  $_REQUEST[LINKEDIN::_GET_TYPE] = '';
}

您可以简化为

if (!(isset($_REQUEST[LINKEDIN::_GET_TYPE]))) {
  $_REQUEST[LINKEDIN::_GET_TYPE] = '';
}

答案 1 :(得分:1)

你错过了最后一部分。如果未设置$_REQUEST[LINKEDIN::_GET_TYPE],则$_REQUEST[LINKEDIN::_GET_TYPE]设置为空,而不是空。关键是当调用$_REQUEST[LINKEDIN::_GET_TYPE]时,它存在但没有价值。

答案 2 :(得分:1)

以这种方式思考

if(condition) { (?)
   //TRUE
} else { (:)
   //FALSE
}

所以,

echo condition ? TRUE : FALSE;

如果这是有道理的

答案 3 :(得分:1)

$foo = $bar ? 'baz' : 'qux';

的功能等价物
if ($bar) { // test $bar for truthiness
   $foo = 'baz';
} else {
   $foo = 'qux';
}

所以,是的,你正在做的事情会起作用。但是,对于较新的PHP版本,有一个Tenary的快捷版本:

$foo = $bar ?: 'qux';

这将完全符合您的要求

答案 4 :(得分:0)

就我的知识而言,你的解释是正确的。

三元运算符就像if语句。您拥有的那个看起来像if语句:

if( isset($_REQUEST[LINKEDIN::_GET_TYPE] ) {
    $_REQUEST['LINKEDIN::_GET_TYPE] = $_REQUEST['LINKEDIN::_GET_TYPE];
} else {
    $_REQUEST['LINKEDIN::_GET_TYPE] = ''; // It equals an empty string, not null.
}

如果你不确定发生了什么,有时候更容易看到像普通if语句这样的三元语句。

您所拥有的声明似乎正在按照您的说法进行操作,如果设置了值,则将值设置为自身,如果未设置,则将其设置为空字符串。