我理解的是,if
,for
s,case
s,array
s,function
s,以及其他句法结构和我的编码经验是70年代风格的Fortran和T-SQL。
现在我正在尝试理解PHP,但它偶尔会将几个语句压缩成一个混淆的代码行。以下单行PHP的扩展等价物是什么?
$start = gt("start") === false ? 0 : intval(gt("start"));
答案 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
的多行。