我正在阅读其他人的代码,他们有这样的一行:
$_REQUEST[LINKEDIN::_GET_TYPE] = (isset($_REQUEST[LINKEDIN::_GET_TYPE])) ? $_REQUEST[LINKEDIN::_GET_TYPE] : '';
我只想确保遵循这一点。我可能最终想出了它的逻辑。
这是对的吗?
如果设置了$_REQUEST[LINKEDIN::_GET_TYPE]
,则将其分配给自己。 (表示为无效条件)否则将其设置为空字符串。 (这意味着NULL(未定义)和“”在脚本的其他部分不会被视为相同。)
答案 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语句这样的三元语句。
您所拥有的声明似乎正在按照您的说法进行操作,如果设置了值,则将值设置为自身,如果未设置,则将其设置为空字符串。