2010-08-16 77 views
2

用戶2優惠購買用戶1用戶1可以接受拒絕。如果用戶1接受,那麼他們都將能夠提供有關交易的反饋。這兩個IF塊中哪一個更好的編碼實踐?

我有2塊IF語句。 他們都工作,做同樣的事情,但哪個更好的編碼實踐?

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

可能重複[嵌套與複合條件](http://stackoverflow.com/questions/3378629/nested-versus-composite-conditions) – Gordon 2010-08-16 15:24:45

+3

我會關心自己更多關於醜陋的HTML連接和PHP控制流邏輯混雜。 – Gordon 2010-08-16 15:26:08

+0

@戈登感謝您的鏈接 – Jonathan 2010-08-16 15:26:18

回答

4

第一個向您顯示路徑:如果狀態的數量增加,您可以將功能抽象爲一個功能很小的功能。它看起來更乾淨。

我還希望從PHP中分離實際的HTML。取而代之的

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> 

但每一個他自己的。

+0

注:我使用短標籤來節省空間,我知道它們並不總是在每臺服務器上都有效。如果是這樣的話,用'<?php ='代替'<?=' – 2010-08-16 15:57:52

3

這是符合的意見,但我敢肯定,大多數人都會認爲,第一個是清潔,因爲你刪除重複(檢查,看看他們是買方或賣方)。如果您有更多status類型,這將更加明顯。

1

我會說塊1是更好的編碼實踐一般,因爲你不重複的信息。話雖如此,塊2更準確地描述了可能出現在不同語言環境中的一組策略模式對象,並且可以進一步降低代碼的複雜性。

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>"; 
    } 
} 
相關問題