ITPub博客

首页 > 数据库 > Oracle > 达内培训:PHP编程的五个好习惯(二)

达内培训:PHP编程的五个好习惯(二)

Oracle 作者:bocai01 时间:2014-03-14 15:47:28 0 删除 编辑

  前面我们已经为大家了解 PHP编程的五个好习惯(一)的内容,现在达内 http://www.chinatarena.com/ 老师继续带大家去了解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>http://www.example.com/feed.XML</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>http://www.example.com/rss</docs>" .
    "<generator>MyFeed Generator</generator>" .
    "<managingEditor>editor@example.com</managingEditor>" .
    "<WebMaster>webmaster@example.com</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>http://www.example.com/feed.XML</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>http://www.example.com/rss</docs>" .
    "<generator>MyFeed Generator</generator>" .
    "<managingEditor>editor@example.com</managingEditor>" .
    "<WebMaster>webmaster@example.com</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培训 http://www.chinatarena.com/php/ 小结:将长方法拆分为短方法也是有限制的,过度拆分将适得其反。因此,不要滥用这个良好的习惯。将代码分成大量的片段就像没有拆分长代码一样,都会造成阅读困难。

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23442387/viewspace-1117663/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-03-03

最新文章