PHPBONE主张的PHP编码规范

Source:phpbone.com  Author:IT柏拉图
2013-11-20

开发时以敏捷为原则,但基本的规范必须遵守,程序要注重可读性,不要有太多“个性化”的代码!
为了方便更快入门,这里提取重点说明如下:

1、缩进用4个空格代替制表符,以便于不同环境下有更好的兼容性。


2、大括号里面内容较少时,可以不换行,但较长时建议换行,这样可以保持代码的阅读简易性。
    
建议少于三行的代码块使用不换行的风格,三行及以上的代码对大括号进行换行,类、函数、成员函数限定不管
代码行数长短均强制换行。
如:
if() {
        ...
}
function test()
{
       ...
}

3、变量、成员函数、类名、表名、字段名等命名用下划线分隔法,并且全用小写字母。

     如:open_account()、$acc_users

4、文件命名规范:

     cls_ 框架基础类文件      (存放在 /library   通常是动态类)
     pub_ 项目公共接口类     (存放在 /library  通常是非数据模型的静态类)
     mod_ 数据模型类 (存放在 bone/model)
     ctl_ 应用目录控制器类   (存放在 appdir/control)

5、模板文件命名方式为:appdir/(ctl name).(action name).tpl

     其中 ct=index 的 index 可以省缺
     如:
     templates/template/index.tpl
     templates/template/admin/index.index.tpl
     templates/template/admin/archives.add.tpl

6、开发时使用严格模式,重点需要注意下面几点:

     (1)、严禁变量没有赋值就直接使用;
     (2)、字符串中使用变量应该用{}括起来,如:$str = "你是:{$type}?";
     (3)、对于没有内部使用变量的字符串尽量用 '' 表示,表示数组元素的字符串,必须用 '' 括起来。
          如: $str = '我是普通字符串!';   $names['tom'] = '汤姆';
     (4)、数据模型类尽量偏向使用静态方法的原则,使程序简单易读(对于逻辑极明显的类可例外,一般是库或第三方
的库才允许使用动态对象)。

7、关于源码编码问题需特别注意的是: 没特殊情况,BONE项目都是推荐用utf-8编码的,由于php无法处理带bom的
源码,所以务必把源码保存为utf-8无bom的格式,以免输出多余的头导致出错! 

8、关于在控制器使用私有方法 原则上,控制器类是不放私有逻辑的,但有时为了简便起见,也允许放不
     公用的简单逻辑代码,这种代码函数名用 _ 开头,如:function _test_username(){ ... },建议模型类里的
     私有方法也用这种方式书写,这样用不同编辑器读代码时都能更简便的识别整个类的情况 。

9、关于PHP表达式之间的空格: 对于初级程序员,往往对代码的空格之类有恐惧症,担心一些多余的空格会影响
代码执行或性能,在表达式、变量列表之间没有空格,这样的代码,实际上是很不美观的,修改时受到光标位置的影响,
也更容易改错,一般性的建议是:运算符和变量之间,应该留有空格;函数参数列表之间,应该含有空格;
括号的两端如果含有表达式或多个变量的,也应该含有空格。

例:

  1. $can = array("clientIp"=>"127.0.0.1","sortType"=>$sortType,"pageSize"=>$limit,"page"=>$page); 
  2. cache::set($GLOBALS['config']['cache']['df_prefix'],"lvyou_hotlinelist",$data,86400); 
  3. if(isset($data["lineId"])){$data = array($data);} 
  4. foreach($data as $key=>$val

像上述代码,即使已经进行语法加亮,都会有密麻的感觉,建议按如下方式加空格:

  1. $can = array"clientIp" => "127.0.0.1""sortType" => $sortType"pageSize" => $limit"page"=>$page );  
  2. cache::set( $GLOBALS['config']['cache']['df_prefix'], "lvyou_hotlinelist"$data, 86400 );  
  3. if( isset($data["lineId"]) ) $data = array($data); 
  4. foreach$data as $key => $val ) 


10、代码安全务必注意事项:
     (1)、凡是where查询语句里的变量,务必加引号,符合某种类型的,就必须按某种类型预先过虑;
    (2)、insert、update类语句,如果不是使用lurd类,必须要进行操作前对所有数据安全性进行检测;
    (3)、凡是可能直接向页面输出的内容,必须考虑屏蔽script、iframe、meta等,以免产生xss跨站漏洞;
    (4)、涉及文件上传的,必须多次详细进行检查,确定漏洞存在可能性。

 

分享到: