前面我们已经为大家了解 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. 2020年第十五届竞赛数据上报竞赛数据给高等教学学会统计
  2. 网络传输为什么要序列化_企业为什么要选择网络营销外包
  3. 它来了,它来了,最强目标检测算法YOLO v4,它真的来了!!!
  4. 确定活动的热点垃圾收集器
  5. Python全栈开发——subprocess struct
  6. 【解决】client does not support authentication
  7. c++ 指针(不断更新)
  8. 蓝桥杯单片机历年真题答案
  9. 微信小程序:调用API接口
  10. Win系统 - 如何解决 Windows + P 键无法切换双显复制模式?
  11. Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
  12. 大师级中国风复古景区网站设计及html前端源码
  13. robotium和appium区别
  14. 【DirectX学习笔记】01_D3D初始化准备-基本绘图概念
  15. 阿里云 vps 关机 重启 无法连接
  16. 水仙花数 (hdu2010)
  17. 南京恩博:绿水青山的守卫者
  18. 软件架构设计师-ArmStrong公理系统-函数依赖-索引文件结构-基础知识点-考试论文应试技巧
  19. 用深度学习构造聊天机器人简介
  20. 面试题promise原理

热门文章

  1. 验证登陆信息的合法性
  2. js中prototype用法
  3. 一淘网挑战百度意在造势 人才储备成最大障碍
  4. JavaEE实战班第十二天
  5. 想用Python爬小姐姐图片?那你得先搞定分布式进程
  6. linux文件夹重命名busy,Linux下执行程序出现 Text file busy 提示时的解决方法
  7. Spring5 新增的两大功能,吹一波这个框架!
  8. 国产数据库 OceanBase 二次刷榜 TPC-C,7 亿 tpmC!
  9. 扫帚:我天天都能立起来,看把你们闲的
  10. 编码5分钟,命名2小时?Java开发都需要参考的一份命名规范!