首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>PHP教程>资讯:五个PHP编程的好习惯

五个PHP编程的好习惯

www.jz123.cn  2009-12-14   来源:   中国建站    责任编辑(袁袁)    我要投递新闻

  有些人问,优秀程序员和大牛有什么区别,大概有10到20种吧。因为大牛有很好的编程习惯和丰富的经验,所以他们非常的高效。如果不好的编程习惯出现在你的代码里,你的代码效率就会降低。本文阐述一些好的编程习惯,他们可以让你成为更好的程序员。

  这些习惯能让你的代码在高效运行的同时提高可维护性。你写代码的时候,可能大部分时间都浪费在维护上了,程序的维护代价很高。培养良好的编程习惯,如模块化设计,可以让你的代码可读性更好,从而容易维护。

  代码中的问题往往伴随着不良的编程习惯,而且后者会导致代码不好修改并可能出现新的缺陷。下面有五个好的编程习惯,将帮你避免这些陷阱:

  使用友好的命名方式。

  使用更精悍短小的代码。

  注释你的代码。

  编写异常处理。

  永远,永远不要复制粘贴.(玉米:我深深的同意这一点)

  下面的章节将解释这些习惯。

  良好的命名方式是最重要的编程习惯,因为好的命名会让代码易懂,好懂。代码的可读性决定它的可维护性。即使你在代码没有写注释,如果它可读性好的话,它也修改起来也会简单。你应该在练习开时就使用良好的命名方式,让你的代码像一本书一样。

  例1包含一个过短的变量名,写出这样的代码非常不好弄懂,而且函数名也没有清晰的描述出这个方法是做什么的。函数名表示了函数的功能,如果它却是做别的用途的,那就会误导别人。

  Listing 1. Bad: Ambiguous or meaningless names

  <?php

  function getNBDay($d)

  {

  switch($d) {

  case 5:

  case 6:

  case 7:

  return 1;

  default:

  return ($d + 1);

  }

  }

  $day = 5;

  $nextDay = getNBDay($day);

  echo ("Next day is: " . $nextDay . "n");

  ?>

  例2则给出了使用良好命名方式的代码。重新命名函数是为了更好的反映它们的功能。变量也重新命名为描述性的。只有一个在循环中的$i还使用短的变量名。尽管有些人不同意,短变量名在循环中是请允许的——甚至更好些,因为它们清晰的起到了指针的功能。

  <?php

  define ('MONDAY', 1);

  define ('TUESDAY', 2);

  define ('WEDNESDAY', 3);

  define ('THURSDAY', 4);

  define ('FRIDAY', 5);

  define ('SATURDAY', 6);

  define ('SUNDAY', 7);

  /*

  *

  * @param $dayOfWeek

  * @return int Day of week, with 1 being Monday and so on.

  */

  function findNextBusinessDay($dayOfWeek)

  {

  $nextBusinessDay = $dayOfWeek;

  switch($dayOfWeek) {

  case FRIDAY:

  case SATURDAY:

  case SUNDAY:

  $nextBusinessDay = MONDAY;

  break;

  default:

  $nextBusinessDay += 1;

  break;

  }

  return $nextBusinessDay;

  }

  $day = FRIDAY;

  $nextBusDay = findNextBusinessDay($day);

  echo ("Next day is:" . $nextBusDay . "n");

  ?>

  我鼓励你在函数中分隔长的条件给函数命名,以便于描述这个条件。(玉米:这句话啥意思?5555)这个技巧会让你的代码容易阅读和扩展,因此它可以 被抽象复用。如果条件发生了改变,这样也会很容易更新函数 .由于方法有一个见名知义的名字,化码就不会失去它本来的意思或者变得难以理解。

  使用更少的代码

  编写代码、解决问题是一种容易的事情。当你解决一个正在发生的问题,编呀编,写呀写,你的方法越来越长。只要你回头使用更少的代码来重构,就是过了很久也没什么问题。

  重构是个好主意,但你应该养成第一次就写出更短小精悍代码的习惯。在一个窗口上(玉米:不用翻页)就能看全的短小函数更容易理解。 要是一个函数长出了窗口,就很难理解了,因为你不能快速的从头到脚的浏览整个代码。

  当构思一个方法的时候,你还应该养成一个让它们只做一件事情的习惯。以下因素写代码时应常注意。第一,只做一件事情的函数更易于复用。第二,这样的函数测试更方便。第三,这样的函数好读易懂方便改——如果必要的话——让它们尽可能的简单吧。

  坏习惯:过长的函数(很多时候)

  例三是过长函数的表现。它不知道自己要做什么。它做太多的事情,所以没有集成化。它更难以理解,不好Debug和测试。它遍历文件建立列表,它给对象赋值,它做一些计算,……它耕田,它浇水,甚至做更多事情。(^_^)

  例三. 坏习惯:过长函数

  <?php

  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.php100.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.php100.com/rss</docs>" .

  "<generator>MyFeed Generator</generator>" .

  "<managingEditor>editor@php100.com</managingEditor>" .

  "<webMaster>webmaster@php100.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);

  }

  ?>

  要是你再加更多东西到这个函数里,它会很快变得难以维护。

  好习惯:可管理,集成化的函数

  <?php

  function createRssHeader()

  {

  return "<rss version="2.0">" .

  "<channel>" .

  "<title>My Great Feed</title>" .

  "<link>http://www.php100.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.php100.com/rss</docs>" .

  "<generator>MyFeed Generator</generator>" .

  "<managingEditor>editor@php100.com</managingEditor>" .

  "<webMaster>webmaster@php100.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根据IP跳转不同城市代码 下一篇:php 多个submit提交表单 处理方法

评论总数:0 [ 查看全部 ] 网友评论


关于我们隐私版权广告服务友情链接联系我们网站地图