用户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>';
}
答案 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&action=accept'>Accept</a> /"
. " <a href='transactions.php?id=$transactionid&action=reject'>Reject</a><br />";
} elseif ($row['status'] == 'A') {
echo "<p>$buyerName paid $price for your $title</p>"
. "<a href='feedback.php?id=$transactionid&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&action=givefeedback'>Give Feedback</a></p>";
}
}