【发布时间】:2013-09-04 11:00:02
【问题描述】:
我有这段代码不清楚,特别是三元的复杂使用 运营商
if (!$byField && is_numeric($v)){ // by ID
$r=$fromRow?
$fromRow:
($v?
dbRow("select * from pages where id=$v limit 1"):
array()
);
}
如果有人可以解释如何评估三元运算符的嵌套使用
【问题讨论】:
标签: php
我有这段代码不清楚,特别是三元的复杂使用 运营商
if (!$byField && is_numeric($v)){ // by ID
$r=$fromRow?
$fromRow:
($v?
dbRow("select * from pages where id=$v limit 1"):
array()
);
}
如果有人可以解释如何评估三元运算符的嵌套使用
【问题讨论】:
标签: php
在代码中使用嵌套的三元运算符会增加不必要的复杂性。出于同样的原因,它不应该被使用。只需使用普通的 if-else 块代替。这更具可读性。
if (condition) {
# code...
}
else {
# code...
}
回答你的问题:
$r = $fromRow ? $fromRow : ( $v ? dbRow("..."): array() );
上面的语句可以改写如下:
if (!$byField && is_numeric($v))
{
if ($fromRow)
{
$r = $fromRow;
}
elseif ($v)
{
$r = dbRow("select * from pages where id=$v limit 1"):
}
else
{
$r = array();
}
}
如您所见,它更具可读性。
【讨论】:
考虑以下代码:
<?php
$a = true;
$b = false;
$c = true;
echo (
$a
? 'A is true'
: (
$b
? 'A is false, but B is true'
: (
$c
? 'A is false, B is false, but C is true'
: 'A, B and C are all false'
)
)
);
?>
这很容易改写成这样:
<?php
if ($a) {
echo 'A is true';
} else {
if ($b) {
echo 'A is false, but B is true';
} else {
if ($c) {
echo 'A is false, B is false but C is true';
} else {
echo 'A, B and C are all false';
}
}
}
?>
【讨论】:
if (!$byField && is_numeric($v)){ // by ID
if ($fromRow) {
$r = $fromRow;
else if ($v) {
$r = dbRow("select * from pages where id=$v limit 1"):
} else {
$r = array();
}
}
【讨论】: