我有这个过程,这是我的应用程序的核心,即我创建,但由于某种原因,我觉得这是最糟糕的方式(本能),我想看看他们是否有问题这个过程我正以一种糟糕的方式接近它!附:代码工作正常,只是重构问题。
过程是:
用户访问主页,他们会看到其他网站成员(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']);
}
我已将功能代码放入pastie。
formatUpdate function http://pastie.org/1213958
getUserUpdates function http://pastie.org/1213962
编辑这两个函数来自home.php中包含的不同文件, 来自functions.php的formatUpdate 来自queries.php的getUserUpdates
答案 0 :(得分:2)
首先,您可以使用单独的函数来获取数据和格式化数据。这是重构代码的良好开端。它使将来更容易:如果您想要以不同方式格式化数据,您可以扩展格式化程序。
第二,这是lambda的核心意义:
$results=function getUserUpdates($_SESSION['user_id'];
删除function
关键字。在定义函数时使用function
。但在这里你只打电话给一个。 (您在queries.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 :(得分:1)
首先,我认为你的意思是:
$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()
)。函数返回数据并让原始调用者回显它是首选。这允许呼叫者在需要时执行额外的数据按摩。
除此之外,您的代码正在获取数据,循环并对结果采取行动,这几乎是标准票价。
我认为你的本能对自己有点过于苛刻;)有待改进,但这肯定不是做任何事情的最糟糕方式。