达内php编程,达内培训:PHP编程的五个好习惯(二)
前面我們已經為大家了解 PHP編程的五個好習慣(一)的內容,現在?老師繼續帶大家去了解PHP編程的五個好習慣(二)的內容。下面是本節的正文。
專心解決一個問題之后再繼續編程,這樣會讓您更輕松。在解決一個緊急的問題時,如果繼續編程,會使函數越來越長。從長遠來說,這并不是一個問題,但您要記得回過頭來將它重構為更小的部分。
重構是個不錯的主意,但您應該養成編寫更短、功能更集中的代碼。短的方法能夠在一個窗口中一次看完,并且容易理解。如果方法過長,不能在一個窗口中一次看完,那么它就變得不容易理解,因為您不能快速地從頭到尾了解它的整個思路。
構建方法時,您應該養成這樣的習慣,讓每個方法只完成一件事情。這個習慣很好,因為:首先,如果方法只完成一件事情,那么它就更容易被重用;其次,這樣的方法容易測試;第三,這樣的方法便于理解和更改。
不良習慣:過長的方法(完成很多件事情)
清單 3
展示了一個很長的函數,其中存在很多問題。它完成很多件事情,因此不夠緊湊。它也不便于閱讀、調試和測試。它要做的事情包括遍歷一個文件、構建一個列表、為每個對象賦值、執行計算等等。
清單 3. 不良習慣:過長的函數
function writeRssFeed($user)
{
// Get the DB connection information
// look up the user's preferences...
$link = MySQL_connect('mysql_host', 'mysql_user',
'mysql_password')
OR die(mysql_error());
// Query
$perfsQuery = sprintf("SELECT max_stories FROM user_perfs WHERE
user= '%s'",
mysql_real_escape_string($user));
$result = mysql_query($query, $link);
$max_stories = 25; // default it to 25;
if ($row = mysql_fetch_assoc($result)) {
$max_stories = $row['max_stories'];
}
// go get my data
$perfsQuery = sprintf("SELECT * FROM stories WHERE post_date =
'%s'",
mysql_real_escape_string());
$result = mysql_query($query, $link);
$feed = "<rss version="2.0">" .
"<channel>" .
"<title>My Great Feed</title>" .
"<link></link>"
.
"<description>The best feed in the world</description>" .
"<language>en-us</language>" .
"<pubDate>Tue, 20 Oct 2008 10:00:00 GMT</pubDate>" .
"<lastBuildDate>Tue, 20 Oct 2008 10:00:00 GMT</lastBuildDate>"
.
"<docs></docs>"
.
"<generator>MyFeed Generator</generator>" .
"<managingEditor></managingEditor>"
.
"<WebMaster></webMaster>"
.
"<ttl>5</ttl>";
// build the feed...
while ($row = mysql_fetch_assoc($result)) {
$title = $row['title'];
$link = $row['link'];
$description = $row['description'];
$date = $row['date'];
$guid = $row['guid'];
$feed .= "<item>";
$feed .= "<title>" . $title . "</title>";
$feed .= "<link>" . $link . "</link>";
$feed .= "<description> " . $description .
"</description>";
$feed .= "<pubDate>" . $date . "</pubDate>";
$feed .= "<guid>" . $guid . "</guid>";
$feed .= "</item>";
}
$feed .= "</rss";
// write the feed out to the server...
echo($feed);
如果多編寫幾個這樣的方法,維護就成了真正的難題了。
良好習慣:易管理、功能專一的方法
清單 4
將原來的方法改寫為更加緊湊、易讀的方法。在這個示例中,將一個很長的方法分解為幾個短方法,并且讓每個短方法負責一件事情。這樣的代碼對將來的重用和測試都是大有裨益的。
清單 4. 良好習慣:易管理、功能專一的方法
function createRssHeader()
{
return "<rss version="2.0">" .
"<channel>" .
"<title>My Great Feed</title>" .
"<link></link>"
.
"<description>The best feed in the world</description>" .
"<language>en-us</language>" .
"<pubDate>Tue, 20 Oct 2008 10:00:00 GMT</pubDate>" .
"<lastBuildDate>Tue, 20 Oct 2008 10:00:00 GMT</lastBuildDate>"
.
"<docs></docs>"
.
"<generator>MyFeed Generator</generator>" .
"<managingEditor></managingEditor>"
.
"<WebMaster></webMaster>"
.
"<ttl>5</ttl>";
}
function createRssFooter()
{
return "</channel></rss>";
}
function createRssItem($title, $link, $desc, $date, $guid)
{
$item .= "<item>";
$item .= "<title>" . $title . "</title>";
$item .= "<link>" . $link . "</link>";
$item .= "<description> " . $description .
"</description>";
$item .= "<pubDate>" . $date . "</pubDate>";
$item .= "<guid>" . $guid . "</guid>";
$item .= "</item>";
return $item;
}
function getUserMaxStories($db_link, $default)
{
$perfsQuery = sprintf("SELECT max_stories FROM user_perfs WHERE
user= '%s'",
MySQL_real_escape_string($user));
$result = mysql_query($perfsQuery, $db_link);
$max_stories = $default;
if ($row = mysql_fetch_assoc($result)) {
$max_stories = $row['max_stories'];
}
return $max_stories;
}
function writeRssFeed($user)
{
// Get the DB connection information
$settings = parse_ini_file("rss_server.ini");
// look up the user's preferences...
$link = mysql_connect($settings['db_host'],
$settings['user'],
$settings['password']) OR die(mysql_error());
$max_stories = getUserMaxStories($link, 25);
// go get my data
$newsQuery = sprintf("SELECT * FROM stories WHERE post_date =
'%s'",
mysql_real_escape_string(time()));
$result = mysql_query($newsQuery, $link);
$feed = createRssHeader();
$i = 0;
// build the feed...
while ($row = mysql_fetch_assoc($result)) {
if ($i < $max_stories) {
$title = $row['title'];
$link = $row['link'];
$description = $row['description'];
$date = $row['date'];
$guid = $row['guid'];
$feed .= createRssItem($title, $link, $description, $date,
$guid);
$i++;
} else {
break;
}
}
mysql_close($link);
$feed .= createRssFooter();
// write the feed out to the server...
echo($feed);
}
小結:將長方法拆分為短方法也是有限制的,過度拆分將適得其反。因此,不要濫用這個良好的習慣。將代碼分成大量的片段就像沒有拆分長代碼一樣,都會造成閱讀困難。
總結
以上是生活随笔為你收集整理的达内php编程,达内培训:PHP编程的五个好习惯(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: classpath理解
- 下一篇: VS 2005竟然会突然失踪