Untitled Document

phplib

回目录上一页下一页

 

八.使用phplib编程具体例子
1.一些声明

  关于本例子,本例子原来是为本协会(中山大学GNU/Linux协会)内部会员编写的,因此从比较长远的角度考虑来编写,考虑比较多的是代码编写规范和习惯与算法。考虑到这些因素对编程也是很重要的,因此相关的章节与内容我并没有删除,如果读者觉得这部分没必要的话请email通知笔者,谢谢。

2.代码的编写风格

  这里讲的不是如何写注释或者是如何写版权信息,而是提出若干比较有代表性和比较优美的编程习惯(这里称做风格)。一般来说,php和perl等web脚本程序,都不可避免地和html等扯上关系。而相当多的程序员并没有很好地注意自己的php/perl代码和html代码的关系,造成了程序行艰涩难懂,结构混乱最后连自己都懒得看的结局。

  本人从开发ZSU-Slash-Pro的这一个月里发现,优秀的程序不仅仅有优秀的算法,还有优美而易懂的程序结构。尤其对于大型程序来说,如果代码含糊,结构混乱的话,即使是程序开发者本人,看起代码也会觉得格外费力,其他人看起来就更加辛苦了。

  因此很有必要摸索并制订出一套合适的编写代码的规范,用这套规范来约束和统一程序开发人员开发的代码风格。使之易于阅读和修改,方便日后维护和进一步开发的人员,使调试程序简单化成为可能。

  这里,我主要参考了PHPSlash和phplib和FreeTrade等几个中大型程序,结合自己的一点小经验,总结出了以下几点:

(1).通用内容做成包含文件

  这个方法是将每个生成的页面都会包含的通用内容做成包含文件,这样减少了程序的长度。便于统一修改例如phpslash中它每个页面都要使用一个统一的Header/Footer,因此只需要创建两个包含文件slashhead.inc和slashfoot.inc文件,然后在每个php程序中使用require语句包含它们进入代码内部就可以了。

  注意:并不是只规定使用header和footer,如果你愿意,你可以添加任意多个require的部分。

(2).公共函数库

  对于那些经常使用的函数和变量,没必要在每个程序内都定义和声明,而只需要将它们放到一个公共的函数/配置文件内就行了。

  例如PHPSlash中有几十个函数,这些函数都统一地存放到functions.inc中,并被包含在了配置文件config.php3中。这样所有页面调用到里面的函数时候就不需要定义而只需要直接调用就可以了。

(3).html代码生成函数(库)

  对于一些经常需要编写的html代码,可以用一个专门的函数生成这些html代码。

  例如一个显示登陆的对话框,你就可以将这个对话框的内容编写一个函数叫dsp_login()。这样每次你需要显示的时候只需要直接调用这个函数就可以了。同样道理,你可以将生成页面的头部和尾部都做成一个函数,例如叫put_header()和put_footer()等。这样就很轻松地将html代码和php代码分离了。

(4).封装过程

  尽量隐藏具体操作的过程,取代的是面向对象的类或者某个操作函数。这样的好处就是将过程封装起来,使主程序简洁明快、层次清楚。

  例如某个注册程序,它需要完成显示注册窗口、检索用户、显示出错、插入用户、发送电子邮件等5个功能。如果把这5个功能都全部用一般的过程设计的话,代码相对难懂。如果换成5个操作函数(或者说把具体分析操作过程封装起来的话)那么就非常简洁而易懂。

  以下是程序主体:

dsp_reg();
check_user();
if ($return=="true")
{
insert_user();
mail_user();
}
else dsp_error();

  可见这样的程序即使是初学者都很容易看懂。

(5).功能分块化

  尽量将程序需要执行的功能分化成对应的操作/动作,也就是分块化,好处是易于程序调试,条理清楚。

  一个最好的例子就是PHPSlash的admin.php3。它将所有的功能都归纳成了一个op值。 例如要删除一个用户-->$op="userdelete"。其实它这里还有一个小技巧:就是不是直接调用某个op而是在表单发送的时候发的是另外一个值user_ops,这个值有几个可能:删除/添加/更新。那么它在程序内有一个判断阵列,判断出这个user_ops应该对应什么op,因此方便设计程序。这里假设一个发布新闻的简单系统,所需要的功能就是发布新闻,删除新闻,更新新闻。

  那么归纳成以下3个op:post/delete/update,以下是结构流程(用swich语句):

swich($op) {
case "post":
postnews();
break;
case "delete":
delete();
break;
case "update":
update();
break;
default:
dsp_news();
}

  由以上几点可以看出,如果是能够按照上面提到的几点设计程序的话,那么你设计的就会是个结构良好,代码优美易懂的好程序。不过,这还必须取决于良好的程序设计构思。以下给出一个注册程序的例子,它体现了本文和本编程规范提到的大部分内容。整个程序从设计到完工的时间仅仅用了5个小时。

  虽然并不快,但是基本上是一写好就运转正常,没有什么逻辑错误,结构也比较清楚。

  接下来读者将看到如何利用以上技巧和原则编写一个具体的程序。


回目录 上一页 下一页

本书由类出版物”制作出品
获得更多免费电子图书和电子图书制作工具请访问
http://www.epubcn.com