簡體   English   中英

PHP的重構和更好的PHP編碼?

[英]php refactoring and better coding for php?

我有這個程序,它是我創建的應用程序的心臟,但是由於某種原因,我覺得這是最糟糕的方法(本能),我想看看這個程序是否有問題,並且我以一種不好的方式接近它! ps的代碼工作正常,只是重構問題。

過程是:

用戶訪問首頁,他們通過其他網站memebers(home.php)看到了他們的最新活動,

 //function to bring the latest activities from database
   $results=function getUserUpdates($_SESSION['user_id'];


while($row = mysql_fetch_array($results))

      {
//another function to format the activities in a social stream
          echo formatUpdate($row['user_note'],$row['dt'],$row['picture'],$row['username'],$row['id'],$row['reply_id'],$row['reply_name'],$row['votes_up'],$row['votes_down']);


      }

我已經把功能代碼粘貼了。

formatUpdate函數http://pastie.org/1213958

getUserUpdates函數http://pastie.org/1213962

編輯這兩個函數來自不同的文件,它們包含在home.php中,來自functions.php的formatUpdate來自querys.php的getUserUpdates

首先 ,最好有單獨的功能來獲取數據和格式化數據。 這是重構代碼的良好起點。 它使將來變得更容易:如果您想以不同的方式格式化數據,則只需擴展格式化程序即可。

第二 ,這就是lambda表示的coreyward:

$results=function getUserUpdates($_SESSION['user_id'];

刪除function關鍵字。 在定義function時使用函數。 但是這里您只打一個電話。 (您在querys.php中定義了它。)

第三 ,我同意webbiedave關於echo語句的觀點。 避免這種情況的好方法:在應用程序的“心臟”中,將所有HTML收集到一個位置。 然后,當您收集了將要顯示在頁面上的所有內容后,您可以立即將其全部回顯。 這樣可以更輕松地跟蹤您的操作並記住所有操作的順序。 它還使添加頁眉和頁腳或進行更多格式化變得更加容易。 否則,如果您的代碼周圍散布着echo語句,那么讓不應該出現的錯誤變得容易得多。

這是我的意思的一個非常基本的例子:

$html = '';
$results = getUserUpdates($_SESSION['user_id'];

while($row = mysql_fetch_array($results)) {
    $fields = array(
        'user_note' => $row['user_note'],
        'dt' => $row['dt'],
        'picture' => $row['picture'],
        'username' => $row['username'],
        'id' => $row['id'],
        'reply_id' => $row['reply_id'],
        'reply_name' => $row['reply_name'],
        'votes_up' => $row['votes_up'],
        'votes_down' => $row['votes_down'],
    );
    $html .= formatUpdate($fields);
}
// This way you can do whatever you want to $html here.
echo $html;

還要注意,我將$ row中的所有字段放入數組中,並將其傳遞給formatUpdate()。 這有兩個優點:

  1. 更容易閱讀。
  2. 如果您想更改formatUpdate處理的字段,則不必擔心每次調用時都在代碼中進行搜索以更改參數。

首先,我認為您的意思是:

$results = getUserUpdates($_SESSION['user_id']);

在您的getUserUpdates()函數中,有一個冗余分支:

if ($username == $_SESSION['u_name']){
    // return something
}

if ($username != $_SESSION['u_name']){
    // return something else
}

您不需要第二個if語句,因為只有在$username != $_SESSION['u_name']下,此時運行的任何代碼才會運行。

在我看來,通常最好不要讓不同的函數直接在堆棧上回顯HTML(例如echoVote() )。 最好讓函數返回數據並讓原始調用者回顯它。 如果需要,這可以使調用者執行其他數據按摩。

除此之外,您的代碼正在獲取數據,循環遍歷並根據結果采取行動,這幾乎是標准費用。

我認為您的本能是對自己太苛刻;)有待改進,但這當然不是最糟糕的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM