我从山中来

我是网络一看客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

PHP代码规范[转]

Posted on 2011-03-05 12:29  我从山中来  阅读(163)  评论(0编辑  收藏  举报
PHP代码规范
                            Author: andylin & 流浪牛
 
第一部分:空格和tab
1.将编辑器的Tab大小和Indent Size8个字节.
2.使用 if,for,switch,while等语句,括号如下所示,(而关键字之后最好加一个空格)。如下所示:       
       if (bSet == NULL)
       {
              ...
       }
 
3.关键字之后最好加一个空格。运算符之后也最好加上一个空格。包括:&& || & | ==  != for ifwhile、+、-、/。例如:
int i = 0; 
for (i = 0; i < N; i++)
{
       ....
}
 
第二部分:命名规则
4.变量命名规则:
    1):普通类型变量根据类型的在前面加上小写前缀,例如
        数组类型最好加上 arr*前缀。
        
$n*       = 0; (tab键对齐)
        $ch*      = 0;
        $str*      = “”;
 
2):类的成员(包括结构体)变量加上m_的前缀。
3):类的命名用C开头代表示一个class。比如:CPointView
4):文件的命名视其用途而命名。类的命名为类名去掉C .php。函数文件最好将功能相近的函数集放在一起,以功能命名。
5):原则上所有的命名都是以“26个字母”_“数字”组成。不允许出现中文。
      
5.函数命名及定义方法:
    1):函数名称应根据实际用途来命名.
2):函数名称首字母和里面每个名词头必须是大写
3):每个函数必须有注释表明参数和实际用途,      
4):与类的命名区别是类以C开头,其余的命名规则一致。不过,类是一个静态的描述而函数是一个动态的实现。所以类一般是名词性较强而函数是动词性比较的强。
下面列出几个函数命名例子:
       ///////////////////////////////////////////////////////////////////////
       // 函数名       : PrintArray
       // 功能描述     : 打印数组
       // 参数         : $arr ;数组名
       // 返回值       :
       ///////////////////////////////////////////////////////////////////////
 
 
 
   4):函数的里面的变量的定义因该全部放在{}开头之内,而不是到处定义。变量定义必须整齐规范,尽可能的初始化。
5:)变量定义和代码开始之间必须空格两行,例如
      
见最后部分
 
       6):函数体不宜过大,避免超过一百行代码。函数功能应该单一
 
6.类定义及注意事项
       1):类的定义按照实际用途命名,然后需要在前面加上大写的C前缀。
       2):每个类都要实现构造和析构两个成员函数,用于初始化和资源释放。
       3):变量定义和成员函数定义要分开定义,
       4):要做到层次分明结构清晰,下面是一个例子:
见最后部分
 
      
第三部分:文件组织
7.文件的说明:
       每个文件开头包括(*.php)都加上文件内容说明,应该包括以下内容:
       文件名称,创建日期,功能说明,作者,最后修改日期,修改人,如下:
//////////////////////////////////////////////////////////////////////////////////
//文件名称:    file.php
//创建日期:    2006/04/19
//功能说明:    打印数组
//    :    andylin
//版本号:   1.0.0.1
//////////////////////////////////////////////////////////////////////////////////////
 
8.每一个项目或者新产品都有一个Readme.txt [项目文件分布及功能说明,使用的外部连接库资源]和一个文档设计.doc(整体的说明项目的加构)。
9.文件结构的组织:./images ./index ./include ./flash 其中 ./images 存放图片文件,include中是系统要引用的重要文件,一般在./include/parameter中存放参数文件,在./include/config中存放配置文件,./include/function中存放全局的方法。在./include/class中存放类的定义与实现。./falsh存放flash文件。./style存放CSS文件。./scripts 存放比如JavaScrip脚本文件。./media存放多媒体文件。
第四部分:注释
10.单行注释用//多行注释用/* */组合。推荐使用//注释(因为/* */不允许嵌套使用,而//可以)。
11.文件修改的注释:如果文件修改了在文件的说明后面加上这些东西
       ///////////////////////////////////////////////////////////////////////
       // 修改日期:        2006101
       // 修改人:          andylin
// 版本号:            1.0.02
       // 修改目的           
       /*
              说明目的(例如:添加几个新的方法)
       */
///////////////////////////////////////////////////////////////////////
       最后在修改的地方标上其实修改和结束修改的标志。格式为:
       //modify start + 版本号(by 作者)
              …(源代码)
       //modify end + 版本号(by 作者)
12.关于引入语句的注释:
//数据库类操作
requireonce(“./class/Db.php”);
要注意的几点:
a): 推荐使用requireonce
b): 所有的requireonce都放在最前面。文件信息之后。
 
第五部分:其余
 
13命名空间:如果可能尽量的使用。将功能比较相似的模块放在一个名字空间中。
14.空行:空行将逻辑相关的代码段分隔开,以提高可读性。
下列情况应该总是使用两个空行:
a):一个源文件的两个片段(section)之间
b):
类声明与声明之间
c):
两个方法之间
d):
方法内的局部变量和方法的第一条语句之间
 
下列情况应该总是使用一个空行:
a):一个方法内的两个逻辑段之间,用以提高可读性
b):
块注释或单行注释之前

第六部分:参考源代码范例
////////////////////////////////////////////////////
//文件名称:  CPoint.php
//创建日期:   2007/02/01
//功能说明:   关于点的操作的类
//    者:   andylin
//版本号:    1.0.0.1
////////////////////////////////////////////////////
 
////////////////////////////////////////////////////
// 修改日期:          :2007/03/01
// 修改人:            :andylin
// 版本号:       :1.0.02
// 修改目的      
/*
     添加了PrintPoint方法
*/
////////////////////////////////////////////////////
 
// 版本号 + modify start (by 作者)
        
// 版本号 + modify end(by 作者)
 
 
requireonce("./math.php");
 
namespace Math
{
     class CPoint extends CObject
     {   
         //构造函数 (最好把构造函数和析构函数放在最前面
         public function _constructor($nx, $ny)
         {
              $x = $nx;
              $y = $ny;
         }
 
         //析构函数
         public function _destructor()
         {
         }
 
         //1.0.0.2 modefy start(by andylin)
         ///////////////////////////////////////////////////////////////////////
         // 函数名       : PrintPoint
         // 功能描述     : 打印Point的x,y
         // 参数         : 如果n == 1 print x 如果 n == 2 print y 否则print x, y
         // 返回值       :
         ///////////////////////////////////////////////////////////////////////
 
         //类似上面的声明,如果函数复杂应该要写,否者可以不写。比如下面的几个函数很简单就可以不写
                public function PrintPoint($n)
         {
              if ($n == 1)
              {
                   echo "x = ", x;
              }
              else if ($n == 2)
              {
                   echo "y = ", y;
              }
              else
              {
                   echo "x = ", x;
                  echo "y = ", y;
              }
         }
         //1.0.0.2 modefy end(by andylin)
 
         public function SetX($nx)
         {
              $this->x = $nx;
         }
 
         public function SetY($ny)
         {
              $this->y = $ny;
         }
 
         public function GetX()
         {
              return $this->x;
         }
 
         public function GetY()
         {
              return $this->y;
         }
 
         //Data Session
         private $x   = 0; //特殊的如i, j, k, x, y, n之类的可以不按命名规则。
         private $y    = 0 //否者,应当遵循。
     };
};