这两个IF块中的哪一个是更好的编码实践?

时间:2010-08-16 15:21:18

标签: php programming-languages

用户2 可以从用户1 购买商品。 用户1 可以接受拒绝。如果用户1 接受,那么他们将能够提供有关交易的反馈。

我有2个IF语句块。 他们既工作又做同样的事情,但这是更好的编码实践?

  

如果BLOCK 1 检查首先是哪个用户,然后检查交易是否已被接受或是否仍有待处理

 if ($_SESSION['user_id'] == $seller) {

    if ($row['status'] == 'P') {
        echo '<p>' . get_username_by_id($row['buyer']) . ' has made a bid of ' . $row['price'] . ' for your ' . $row['title'] . '
    <a href="transactions.php?id=' . $transactionid . '&action=accept">Accept</a> / <a href="transactions.php?id=' . $transactionid . '&action=reject">Reject</a><br />';
    } else if ($row['status'] == 'A') {
        echo '<p>' . get_username_by_id($row['buyer']) . ' paid ' . $row['price'] . ' for your ' . $row['title'] . '</p>';
        echo '<a href="feedback.php?id=' . $transactionid . '&action=givefeedback">Give Feedback</a></p>';
    }
} else if ($_SESSION['user_id'] == $buyer) {

    if ($row['status'] == 'P') {
        echo '<p> You have made a bid of ' . $row['price'] . ' for ' . $row['title'] . '</p>';
    } else if ($row['status'] == 'A') {
        echo '<p> You have paid ' . $row['price'] . ' for ' . $row['title'] . '</p>';
        echo '<a href="feedback.php?id=' . $transactionid . '&action=givefeedback">Give Feedback</a></p>';
    }
}

或者

  

IF BLOCK 2 只有4个if语句,同时检查用户和事务状态

   if ($_SESSION['user_id'] == $seller && $row['status'] == 'P') {
    echo '<p>' . get_username_by_id($row['buyer']) . ' has made a bid of ' . $row['price'] . ' for your ' . $row['title'] . '
    <a href="transactions.php?id=' . $transactionid . '&action=accept">Accept</a> / <a href="transactions.php?id=' . $transactionid . '&action=reject">Reject</a><br />';
} else if ($_SESSION['user_id'] == $buyer && $row['status'] == 'P') {
    echo '<p> You have made a bid of ' . $row['price'] . ' for ' . $row['title'] . '</p>';
} else if ($_SESSION['user_id'] == $seller && $row['status'] == 'A') {
    echo '<p>' . get_username_by_id($row['buyer']) . ' paid ' . $row['price'] . ' for your ' . $row['title'] . '</p>';
    echo '<a href="feedback.php?id=' . $transactionid . '&action=givefeedback">Give Feedback</a></p>';
} else if ($_SESSION['user_id'] == $buyer && $row['status'] == 'A') {
    echo '<p> You have paid ' . $row['price'] . ' for ' . $row['title'] . '</p>';
    echo '<a href="feedback.php?id=' . $transactionid . '&action=givefeedback">Give Feedback</a></p>';
}

4 个答案:

答案 0 :(得分:4)

第一个显示路径:如果状态数量增加,您可以将功能抽象为功能很少的功能。它看起来更清洁。

我也更喜欢将实际的HTML与PHP分开。而不是

echo '<p>' . get_username_by_id($row['buyer']) . ' has made a bid of ' 
. $row['price'] . ' for your ' . $row['title'] . '
<a href="transactions.php?id=' . $transactionid . '&action=accept">Accept</a> / 
<a href="transactions.php?id=' . $transactionid . '&action=reject">Reject</a><br />';

我更喜欢

<p>
  <?= get_username_by_id($row['buyer']) ?> has made a bid of 
  <?= $row['price'] ?> for your <?= $row['title'] ?> 
  <a href="transactions.php?id=<?= $transactionid ?>&action=accept">Accept</a> / 
  <a href="transactions.php?id=<?=$transactionid?>&action=reject">Reject</a>
</p>

但对他自己来说。

答案 1 :(得分:3)

这取决于意见,但我确信大多数人会同意第一个更清洁,因为你要删除重复(检查他们是买家还是卖家)。如果您有更多status类型,这将更加明显。

答案 2 :(得分:1)

我想说块1通常是更好的编码实践,因为你不重复信息。话虽如此,Block 2更准确地描述了一组策略模式对象,这些对象可能出现在不同的语言环境中,并且可以进一步降低代码的复杂性。

答案 3 :(得分:1)

作为个人选择,我更喜欢选项1的结构,因为条件数量较少。但是我会将每个else if更改为elseif以防止因为省略括号而出错。

为了让代码显示输出中使用的一些常见数据,以及每个选项的结束</p>标记的差异,我会将其更改为:

$buyerName = get_username_by_id($row['buyer']);
$price = $row['price'];
$title = $row['title'];

if ($_SESSION['user_id'] == $seller) {
    if ($row['status'] == 'P') {
        echo "<p>$buyerName has made a bid of $price for your $title"
           . " <a href='transactions.php?id=$transactionid&amp;action=accept'>Accept</a> /"
           . " <a href='transactions.php?id=$transactionid&amp;action=reject'>Reject</a><br />";
    } elseif ($row['status'] == 'A') {
        echo "<p>$buyerName paid $price for your $title</p>"
           . "<a href='feedback.php?id=$transactionid&amp;action=givefeedback'>Give Feedback</a></p>";
    }
} elseif ($_SESSION['user_id'] == $buyer) {
    if ($row['status'] == 'P') {
        echo "<p> You have made a bid of $price for $title</p>";
    } elseif ($row['status'] == 'A') {
        echo "<p> You have paid $price for $title</p>"
           . " <a href='feedback.php?id=$transactionid&amp;action=givefeedback'>Give Feedback</a></p>";
    }
}