理解嵌套的三元运算符

时间:2013-09-04 11:00:02

标签: php

我有这段代码,我不清楚,特别是三元的复杂使用 运营商

if (!$byField && is_numeric($v)){ // by ID
$r=$fromRow?
$fromRow:
($v?
dbRow("select * from pages where id=$v limit 1"):
array()
);
}

如果有人可以解释如何评估嵌套使用三元运算符

3 个答案:

答案 0 :(得分:3)

在代码中使用嵌套的三元运算符会增加不必要的复杂性。出于同样的原因,不应该使用它。只需使用普通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();
    }
}

如您所见,它更具可读性。

答案 1 :(得分:2)

请考虑以下代码:

<?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';
            }
        }
    }
?>

答案 2 :(得分:1)

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();
  }
}