理解PHP的三元运算符

时间:2014-04-07 01:10:47

标签: php if-statement

我理解的是,iffor s,case s,array s,function s,以及其他句法结构和我的编码经验是70年代风格的Fortran和T-SQL。

现在我正在尝试理解PHP,但它偶尔会将几个语句压缩成一个混淆的代码行。以下单行PHP的扩展等价物是什么?

$start = gt("start") === false ? 0 : intval(gt("start"));

3 个答案:

答案 0 :(得分:5)

这是ternary operator。它们通常具有以下格式:

expr1 ? expr2 : expr3;

这意味着:

if expr1 then return expr2 otherwise return expr3

可视化如下:

  

您的代码可以重写为:

if (gt("start") === false) {
    $start = 0;
} else {
    $start = intval(gt("start"));
}

它可以改进如下,以避免额外的函数调用:

if (($result = gt("start")) === false) {
    $start = 0;
} else {
    $start = intval($result);
}

答案 1 :(得分:1)

这个?被称为三元运算符。它是一种速记,例如

$x = a ? $b : $c; //其中'a'是表达式,变量或值

也可以写成:

if (a) {
  $x = $b;
}
else {
  $x = $c;
}

基本上,如果表达式a的计算结果等于TRUE,则三元运算符返回b,否则返回c

答案 2 :(得分:0)

其他人已经发布了答案,这些答案很好地解释了三元运算符如何工作的基础知识,但是可以看到三元与if / else的对比,您可以执行以下操作。看看你的例子:

$start = gt("start") === false ? 0 : intval(gt("start"));

现在让我们使用if / else

使其成为一行
if (gt("start") === false) { $start = 0; } else { $start = intval(gt("start")); }

当你看到它的排列方式超出基本结构时,你必须在每个条件中设置$start =

因此知道,三元运算符的主要好处是快速if / else逻辑,可以为单个变量赋值。

从编码的角度来看,这样做很方便,可以通过在调试时注释掉一行来快速禁用该逻辑,而不必注释掉if / else的多行。