首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》25.4 编写可维护代码

关灯直达底部

通常,代码的可维护性问题在Web应用中很容易被忽略,尤其是当网站创建得非常匆忙的时候。有时候,开始编写代码并快速完成它看起来比最初进行规划更重要。但是,在开始工作以前投入一点时间可以节省接下来的许多时间,当在编写的过程中重复编写应用程序的时候,就会发现这一点。

25.4.1 编码标准

大多数IT组织都制定了编码标准——选择文件名、变量名以形成内部编码准则、注释代码的准则、代码缩进的准则等。

因为文档模式经常应用于网站开发,因此在这里,代码标准经常会被忽略。对于独立编码或者在一个较小的团队里编码的人来说,容易低估代码标准化的重要性。当小组和项目不断发展的时候,若还不实行代码标准化的话,不但自己忙得手忙脚乱,而且许多编程人员也会对现存的代码摸不着头脑。

1.定义命名惯例

定义一个命名规范的目的是为了:

■使代码易读。如果在定义变量和函数时使用的名称是非常直观的,就可以像阅读英语句子一样阅读代码,至少可以猜出它们的意思。

■使标识符易记。如果标识符格式统一,就更容易记住使用了什么变量,调用了什么函数。

变量名称应该能够描述其所包含的数据。如果使用变量表示一个人的姓氏,就可以给它取名$surname。也可以在变量名称的长度和可读性之间找一个平衡点。例如,将表示名字的变量取名为$n可以使其类型简单,但是这样的变量不具有良好的可读性。而如果取名为$surname_of_the_current_user,虽然可以提供详细的信息,但是对数据类型来说太长了(容易导致输入错误),并且不具有很大的价值。

还需要决定在什么时候使用大写。正如前面所提到的,变量名称在PHP中是区分大小写的。需要决定变量名称是否全部为小写、全部为大写或者两者混合,例如,将单词的第一个字母大写。我们倾向于全部使用小写,因为它们最容易记忆。

将常量和变量通过大小写区分是一个好主意——通常的模式是,变量都用小写表示(例如,$result),常量都用大写表示(例如,PI)。

一些编程人员喜欢将两个变量使用同一个名字,但是使用不同的大小写来区分,例如,$name和$Name,显而易见,这是非常糟糕的想法。

此外,最好还要避免一些可笑的大小写模式,例如,$WaReZ。没有人会记得它代表什么。

还要考虑多单词变量名称的命名模式。例如,我们已经见过如下所示的模式:

$username

$user_name

$userName

以上都是我们曾经见到过的命名模式。选择哪一种规范都是没有问题的,但关键是要一直保持使用这种规范。另外,对于多单词变量名,一个名字应最多包含2~3个单词。

函数名称的命名规范需要考虑的因素与变量名称命名规范有许多相似之处,当然也有其自身的特点。通常,函数名是面向动词的。PHP内置的函数,例如,addslashes或mysqli_connect清楚地描述了它们的功能或它们要传递的参数。这大大提高了代码的可读性。请注意,这两个函数虽然都是多单词函数名,但是使用了不同的命名模式。从这点来说,PHP的命名是不一致的。原因之一可能就是因为参与的开发人员太多。但是最主要的原因是许多函数名称是直接从不同的语言和API拿过来的,而未经过改动。

此外,还要记住,在PHP中函数名称是不区分大小写的。我们应该一直坚持一种特定的格式,以避免造成混乱。

我们可能希望在许多PHP模块中使用模块命名模式,也就是说,在函数名前都加上模块名称作为前缀。例如,所有的MySQL函数都以mysqli_开头。所有的IMAP函数都以imap_开头。如果代码里有一个购物车模块,则可在该模块中的函数名前加上cart_。

然而,请注意,PHP5提供了过程接口和面向对象接口,在这两种接口中,函数名称是不同的。通常,过程式接口使用下划线(my_function),而面向对象接口使用一种名为studlyCaps的模式(myFunction)。

最后,编写代码的时候使用哪种命名惯例或标准对程序本身并没有多大的影响。只要遵循和使用一致的方针。

2.对代码进行注释

所有的程序都应该有一定程度的注释语句。那么使用何种级别的注释是适当的呢?通常,应该考虑为如下每个项目添加注释:

■文件,无论是完整的脚本还是包含文件——每个文件应该有一个注释,说明该文件的名称、功能、作者和更新日期。

■函数——函数的注释应指明函数的功能,输入参数和返回值。

■类——注释应描述类的用途。类方法应该具有与函数描述相同的注释。

■脚本或函数里面的一大段代码——在脚本之前添加一段伪码样式的注释然后再编写代码是很好的。因此,初始化脚本可能是这样:

<?

//validate input data

//send to database

//report results

?>

这种注释模式是非常方便的,因为在函数调用或其他代码编写之前,代码的注释已经做好了。

■复杂的代码——当整天围绕某件事,或者花费了很长时间来解决这个问题时,应该编写一段注释解释那样做的原因。这样,当下次看到这段代码时,就不会皱着眉头想,“究竟我为什么会那样做呢?”

另一个通常要遵循的原则是一边写代码一边做注释。有人希望在完成项目之后回头注释自己的代码。我敢保证,除非他没有惩罚性的开发时间表并且自律力比我们强,否则这样的事情不会发生。

3.代码缩进

就像在所有的编程语言中一样,我们应该清楚一致地缩进代码。就像个人简历或商业信件的布局一样。缩进使代码更易读,更快地让人理解。

通常,任何属于某个控制结构的程序块都应该缩进于周围的代码。缩进的深度要明显(也就是说,大于一个空格)但不能太大。通常,要避免使用tabs键。虽然容易敲入,但是在许多人的屏幕上它占了太多的空间。我们在所有的项目中都使用了2~3个空格的缩进。

大括号的布局也是一个问题。最常用的两种布局模式如下所示:

模式1:

if(condition){

//do something

}

模式2:

if(condition)

{

//do something else

}

使用哪一种模式由自己决定。但是一旦选择一个,就要在整个项目中保持一致,以免造成混淆。