服务器 频道

PHP编码规范(下)

  【IT168 服务器学院】5. 书写注释

  5.1. 讲一个故事

  把你的注释当作描述系统的一个故事。并且使得你的注释能被机器解析后,以固定的格式放到手册中去。类的注释是故事的一部分,方法的名称、方法的注释、方法的实现也是故事一部分。所有的这些部分编织在一起,使得人们在以后的时间里能够准确的知道你干了什么,为什么这么做。

  5.2. 归档注释

  注释的要归档才有意义,否则,假如在一个地方放一条注释描述你做了什么选择和你为什么这么做,只有考古学家才能发现这是最有用的信息。(如何归档另行规范)

  5.3. 注释结构

  工程的每部分都有特定的注释结构。 程序中的注释,这里给出示例作为规范,注释中以 * @ 为关键字的开始,以:为注释关键字结尾。

  5.3.1. 预定义关键字

  关键字 含义
  Purpose 表示类、属**、方法要做些什么或者什么含义。
  Package Name 类名
  Author 作者
  Modifications 修改记录(编号规则为“No”+日期+“-”+序号)
  See 参考
  Method Name 方法名
  Parameter 参数名(包括类型)
  Return 返回值(包括类型)
  Attribute/Variable Name 属**/变量名
  Type 属**/变量类型

  5.3.2. 类的注释

  /**
  * @ Purpose:
  * 访问数据库的类,以ODBC作为通用访问接口
  * @Package Name: Database
  * @Author: Forrest Gump gump@crtvu.edu.cn
  * @Modifications:
  * No20020523-100:
  * odbc_fetch_into()参数位置第二和第三个位置调换
  * John Johnson John@crtvu.edu.cn
  * @See: (参照)
  */
  class Database
  {
  ……
  }

  5.3.3. 方法注释

  /**
  * @Purpose:
  * 执行一次查询
  * @Method Name: Query()
  * @Parameter: string $queryStr SQL查询字符串
  * @Return: mixed 查询返回值(结果集对象)
  */
  function($queryStr){……}

  5.3.4. 属**或变量注释

  /**
  * @Purpose:
  * 数据库连接用户名
  * @Attribute/Variable Name: mDbUserName
  * @Type: string
  */
  var mDbUserName;

  5.3.5. if (0)来注释外部代码块

  有时需要注释大段的测试代码,最简单的方法就是使用if (0)块:
  function example()
  {
  great looking code

  if (0) {
  lots of code
  }

  more code
  }
  你不能使用/**/,因为注释内部不能包含注释,而大段的程序中可以包含注释。

  5.3.6. 目录文档

  所有的目录下都需要具有README文档,其中包括:
  · 该目录的功能及其包含内容
  · 一个对每一文件的在线说明(带有link),每一个说明通常还应该提取文件标头的一些属**名字。
  · 包括设置、使用说明
  · 指导人们如何连接相关资源:
  o 源文件索引
  o 在线文档
  o 纸文档
  o 设计文档
  · 其他对读者有帮助的东西
  考虑一下,当每个原有的工程人员走了,在6个月之内来的一个新人,那个孤独受惊吓的探险者通过整个工程的源代码目录树,阅读说明文件,源文件的标头说明等等做为地图,他应该有能力穿越整个工程。
  

  6. 其他

  · 采用面向对象的设计方法;

  理由
  毫无疑问这是最接近人们自然思维的方法,可能前期会觉得没有直接书写来得快,能否试着保留自己的看法?好戏在后头!

  · 类的定义采用一个文件一个类,并且类名和文件名相同;

  理由
  o 越来越多的人接受了这种做法
  o 事实证明这种方法使得项目的逻辑结构更清晰

  · 类定义文件中,定义体之外不得出现诸如echo、print等输出语句;

  理由
  出现这样的语句,应该当做出现bug来看。

  · 输出网页的页面不出现SQL语句

  理由
  这是n层结构的编程思想所致,每层的任务不同,虽然可以越权行使,可能这样很快捷,但我们不赞成这么干。

  · 进行SQL执行的数据必须进行有效**检测

  特殊符号:
  对于MS SQL Server,’%_[ ] 这些符号都是在书写SQL语句中的特殊含义字符,在SQL执行前需要对这些字符进行处理。
  脚本符号:
  对于PHP脚本标记,如<??><%%><?php?><script lang<script language="php"></script>,在进入数据库前需要检测处理。
  理由
  这是数据库编程的一个约定,很多参考书上也是这么说,这里需要强调一下。

  · 在HTML网页中尽量不要穿插PHP代码

  循环代码和纯粹变量输出(类似于<?=$UserName?>)除外。
  理由
  o 需要说明的是我们工作的上游,页面设计者的工作,假如在页面中穿插代码,将破坏结构,这应当是我们需要避免的。
  o 在这里的PHP代码只负责显示,多余的代码显然是不应该的。

  · 没有含义的数字

  一个在源代码中使用了的赤裸裸的数字是不可思议的数字,因为包括作者,在三个月内,没人它的含义。例如:
  if (22 == $foo) { start_thermo_nuclear_war(); }
  else if (19 == $foo) { refund_lotso_money(); }
  else if (16 == $foo) { infinite_loop(); }
  else { cry_cause_im_lost(); }
  在上例中22和19的含义是什么呢?如果一个数字改变了,或者这些数字只是简单的错误,你会怎么想?
  使用不可思议的数字是该程序员是业余运动员的重要标志.
  你应该用define()来给你想表示某样东西的数值一个真正的名字,而不是采用赤裸裸的数字,例如:
  define("PRESIDENT_WENT_CRAZY", "22");
  define("WE_GOOFED", "19");
  define("THEY_DIDNT_PAY", "16");

  if (PRESIDENT_WENT_CRAZY == $foo) { start_thermo_nuclear_war(); }
  else if (WE_GOOFED == $foo) { refund_lotso_money(); }
  else if (THEY_DIDNT_PAY == $foo) { infinite_loop(); }
  else { happy_days_i_know_why_im_here(); }
  现在不是变得更好了么?

  
  7. PHP文件扩展名

  
  
常见的PHP文件的扩展名有:html, .php, .php3, .php4, .phtml, .inc, .class...
  这里我们约定:

  · 所有浏览者可见页面使用.html
  · 所有类、函数库文件使用.php

  理由

  · 扩展名描述的是那种数据是用户将会收到的。PHP是解释为HTML的。
  

  8. PHP代码标记

  统一使用<?php ?>,只输出变量时<?=$username?>
  

0
相关文章