什么 ......:......呢?

pay*_*ing 18 php syntax ternary-operator

$items = (isset($_POST['items'])) ? $_POST['items'] : array();
Run Code Online (Sandbox Code Playgroud)

我不明白这段代码的最后一段" ? $_POST['items'] : array();"

这些代码组合到底做了什么?

我使用它从html文本框中获取一堆值并将其存储到会话数组中.但问题是,如果我尝试在文本框中重新提交数据,新的数组会话将完全覆盖旧的会话数组空白和所有空格.

我只想覆盖已经有值的数组中的位置.如果用户决定只填写几个文本框,我不希望先前的会话数组数据被空格(来自空白文本框)覆盖.

我认为上面的代码是问题所在,但我不确定它是如何工作的.请赐教.

Pao*_*ino 42

这是一个 三元运算符:

表达式(expr1) ? (expr2) : (expr3) 求值为expr2if ,如果expr1求值为TRUE,expr3expr1求值为FALSE.

  • 修正了我的答案,反映出对'''使用的意外骚动 (14认同)
  • PHP中有不止一个三元运算符,Gumbo? (2认同)

And*_*are 17

最后一部分称为条件运算符.基本上它是一个简洁的if/else陈述.

它的工作原理如下:

$items =
    // if this expression is true
    (isset($_POST['items'])) 
    // then "$_POST['items']" is assigned to $items
    ? $_POST['items'] 
    // else "array()" is assigned
    : array();
Run Code Online (Sandbox Code Playgroud)

这里还有一些伪代码可能更简单:

$items = (condition) ? value_if_condition_true : value_if_condition_false;
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个快速,迂腐的旁注:PHP文档将此运算符称为三元运算符.虽然条件运算符在技术上是一个三元运算符(即具有3个操作数的运算符),但将它称为三元运算符是一种误称(而非推定).