前面我们已经为大家了解 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编程的五个好习惯(二)相关推荐

  1. 五轴编程_HyperMILL五轴编程培训HyperMILL 软件的特点

    目前,国内外生产企业的数控铣削加工基本上都是采用数控自动编程软件来编程加工,数控编程软件品种. 有很多,常见国外的有UG.Mastercam Cimatron.Catia.Pro/E.DelCAM等, ...

  2. java培训机构_java编程软件培训机构

    java编程软件培训机构,南京小码王科技培训有限公司,欢迎来电预约试听课:13851536647(郑老师)小码王实施以成就感驱动发自内在的建构主义教育,以面向未来高层次人才素质模型为导向,锻炼学生抽象 ...

  3. 数据库编程入门培训(二)

    本文为数据库编程入门培训的第二讲,主要讲述一下数据库编程具体怎么实现.示例代码在本文后面的附件中可以下载. 如上篇文章所描述的那样,由于Microsoft Access数据库比较直观,适合初学者入门学 ...

  4. AMD院士站台 异构计算与OpenCL编程师资培训首站清华开讲

    摘要:2013年10月14日,"2013年异构计算与OpenCL编程师资培训"在清华大学召开.本活动邀请到AMD.Khronos Group及清华大学的多位并行计算领域专家,与参会 ...

  5. python天津儿童培训少儿编程课一定要了解

    长沙一家少儿编程班里,一个两岁半的孩子穿着尿不湿,像模像样地坐在电脑前听着事件.控制.变量.条件.坐标这样的高深词汇:北京10岁的小亮课余时间已经被小提琴.足球.美术和街舞占据,虎妈还是豪掷30000 ...

  6. 如何组织编程教育培训

    格物斯坦小坦克分析家长对于编程重要性的认知提升,对于孩子逻辑能力的空前重视,加之教育考试政策的指挥.越来越说明少儿编程教育培训的必要性. 少儿编程并非新鲜课程,在国外已经流行多年,很多孩子都在接受这方 ...

  7. 长沙哪里学青少年计算机编程,长沙青少年培训编程-青少年编程教育(人工智能编程)...

    一.项目背景: 根据<新一代人工智能发展规划>,为促进全民智能教育发展,配合在中小学阶段设置人工智能相关课程并逐步推广编程教育需要,培养更多适应时代需求的青少年编程教育教师,人力资源和社会 ...

  8. 达内C++21天培训视频教程

    达内C++21天培训视频教程  下载链接.115网盘 http://115.com/file/cl7sdbfr# day21.rar http://115.com/file/cl7q3361# day ...

  9. 薛家计算机培训,薛家ug编程网络培训

    薛家ug编程网络培训,体现为制造方面达到模具制造的技师水平,设计方面达到助理设计师的水平.模具设计与制造段核心能力:冷冲模.塑料模的设计与制造,模具制造设备的安装.调试.使用和维护.模具设计与制造课程 ...

最新文章

  1. 北航与西安交大计算机专业对比,北航和西安交大,谁的工科实力更强,该上哪一所大学呢?...
  2. chrom扩展开发-入门
  3. SVN 撤回(回滚)提交的代码
  4. java message bus_【Microsoft Azure学习之旅】消息服务Service Bus的学习笔记及Demo示例...
  5. 技术道路独行16载,他总结了CTO的五大自我修炼法则!
  6. SQL Select语句完整的执行顺序:
  7. ubuntu 配置 jdk 环境
  8. 【干货】迅雷产品经理:浅析用户成长体系
  9. 共模电感适用的频率_分析共模电感和差模电感寄生电容抵消的方法
  10. boost::edge_list用法的测试程序
  11. Linux centosVMware Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl
  12. 在JS函数中执行C#中的函数、字段
  13. Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技
  14. fedora安装pyenv实现python的版本管理
  15. TextView的一些高级应用(自定义字体、显示多种颜色、添加阴影)
  16. java 随机生成图_java – 如何生成随机图?
  17. keepalived+mysql双主高可用配置
  18. java swing入门教程_java swing基础(菜鸟教程学习)
  19. 麦克风的计算机英语词汇,[转帖]麦克风计划:神舟五号载人飞船词汇
  20. c语言 unpack函数,Pack/Unpack 总结

热门文章

  1. LintCode 字符串查找
  2. 图片切换效果2(定时+左右按钮)
  3. 终于有人把正态分布和二八法则讲明白了
  4. STM32之高级定时器互补输出
  5. 方程组的直接解法和迭代法 python_基于任务驱动的翻转课堂线上教学 ——以《解二元一次方程组复习课》为例...
  6. 在python中字典和集合都是用一对什么作为界定符_Python习题(一)
  7. Redis遇到的那些坑
  8. Kafka 慌了!这个中间件,要火了?
  9. 卧槽!我随便写的一个 API 竟获得 2.5 亿的访问量...
  10. 求你了,别再说Java对象都是在堆内存上分配空间的了!