[英]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()。 這有兩個優點:
首先,我認為您的意思是:
$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.