袁亮,2014-08-26,php代码规范以及项目开发规范,mysql规范
一、命名
1、文件夹、文件名
1.1 只允许小写字母,数字,下划线组成,不允许出现其他字符
1.2 以统一的功能模块名加操作类型命名
1.3 比如:user_add.php,sub/user_add_sub.php
1.4 add_user.php sub/add_user_sub.php 这种写法是不友好的,不要这么写
2、类名
2.1 只允许英文字母,数字组成
2.2 驼峰规则,每个单词的首字母大写
2.3 比如:class BlogPosts{}
3、函数名
3.1 只允许英文字母,数字组成
3.2 驼峰规则,同类名,第一个单词首字母小写
3.3 比如:function postAdd();
3.4 命名以模块名+动作类型命名,比如postDetailGet();而不是getPostDetail,并且将同一个模块的函数尽量放一起
4、变量名
4.1 只允许小写字母,数字,下划线组成
4.2 单词之间以_连接,除循环中之后,不允许出现单字母变量
4.3 善于临时变量,有些变量使用1-2次之后,马上就没用的,可以使用$tmp来命名,减少想变量名的苦恼
4.4 所以的sql语句,都用$sql命名,并且最好是定义完就使用,后面不会再次用到
4.5 常用变量名:
$page:分页页码
$limit:每页显示多少条
$ip:用户ip地址
$dated:当前时间
$ms:mysqls操作类实例
$pager:存放分页的html代码
$data:当前页面主要的数据
$user_id:用户id
$username:用户名
$nickname:用户昵称
5、全局变量
5.1 命名规范同变量,但加前缀g_标示这是一个全局变量
5.2 比如:global $g_username; $g_username = 'yuanliang847';
6、常量名
6.1 只允许大写字母,下划线,数字组成
6.2 比如 define("USER_PASS_MDSTR",'D123#!@ax?DSAD');
#7、session名称
二、php最后结束符
1、不要使用短标签<??>
2、每行后面必须加;号结束
3、纯php文件,最后不要加?>结束符,防止因为最后的空行等输出导致bug
三、单引号、双引号
1、纯字符串的时候,使用单引号
2、字符串中有变量的时候,使用双引号,并且变量必须以{}包含起来,比如$show = "你好{$nickname}!";
3、数组中,非数组下标,一定要加单引号,比如$data['username'] = 'yuanliang847';
4、sql语句中的变量值,以单引号包含起来,比如$sql = "select * from `users` where `username`='{$username}' limit 1";
四、括号使用
1、所有大括号的开始部分都跟在关键字的后面,没有例外,比如:
function getRow($sql){
}
foreach($data as $k=>$v){
}
class Mysqls{
}
2、小括号跟关键词相连,不需要额外的空格
if(1 == $a){
}else if(2 == $b){
}else{
}
3、函数参数左右不需要额外空格
function test($a,$b = 1){
}
五、空格、缩进、大数组缩进
1、所有缩进,均以tab进行缩进,不要使用多个空格
2、空格使用情况:
2.1 $username = 'yuanliang';变量赋值,前后加空格
2.2 比较操作符、算术操作符、逻辑操作符,前后加空格
+= , >= , <= , ==
+ , - , * , %
&& , ||
2.3 一元运算符,不需要空格
++ , -- , ! , &
2.4 对象运算符,不需要空格
$this->test();
parent::test();
3、大数组缩进方式,前面通过tab缩进到 同一层次,=>后面的是一个空格,数组只有1-2个值的时候,不需要写成这样
$data = array(
'user_id' => 1535917,
'username' => 'yuanliang847',
'nickname' => '暗夜御林',
'head' => 'http://i.ci123.com/153/1535917.png',//这种最后一定要加逗号,否则容易出错
);
$uinfo = array('username'=>'yuanliang847','nickname'=>'暗夜御林');
四、安全
1、需要过滤的外部数据:$_GET,$_POST,$_COOKIE,$_SESSION(session因为有可能存储了用户输入的内容,从而导致危险)
2、如果接收的是整形数据,一律以intval强制转为整形
2.1 比如 $user_id = isset($_GET['user_id'])?intval($_GET['user_id']):0;
3、如果是字符型,则需要调用防止sql注入的函数,进行过滤,该函数,在通用的function.php中就有
3.1 比如 $username = isset($_POST['username'])?stripSql($_POST['username']):'';
3.2 stripSql第二个参数,默认会调用stripTags,防止xss攻击,如果内容允许html等,则给定第二个参数
3.3 如果大串用户输入的内容,是会显示在页面的,比如文字内容等,可以使用htmlspecialchars将html实体化
4、接受外部参数的地方要在页面头部,或者函数开始位置全部获取所有可能接受的外部参数,该段代码之后,不允许再直接使用外部数据
5、如果是旧项目,需要改的地方太多,可以引入360的过滤文件,对所有外部危险输入进行过滤,并记录
该文件慎用,特别是在重要项目中,容易导致误判
五、功能块
六、注释
其他:
1、不要使用复杂的异或等逻辑判断(考验运算优先级的)
2、三元表达式只用做最简单的不赋值,不要做复杂的代码
3、不要让代码读起来有歧义,尽量简洁明了
4、不要写非常“巧妙”的代码,而是要让很二的人一眼就能读懂
5、不要使用or and,使用&&和||代替,优先级不同
6、少用while循环,太容易造成死循环
7、switch case 每个环节必须有break,否则会出错
8、理解清楚return continue break的意思,不要乱用
9、包含文件,一律使用include_once
10、嵌套层次最多4层,消除嵌套方法
11、循环中不要计算数量,有些计算能放在循环外面就不要放在循环里计算
11、大括号不可省略
12、使用construct 和 destruct,不要用与类同名的函数初始化 __get __set __autoload禁用
13、只用die,不要使用exit
14、不要使用嵌套式的赋值
if($a = ($c = getName())