本文基于php5.3.29
字符串相关
- 尽量使用字符串函数操作,w3c-string
- 当字符串中没有变量时,使用单引号定义字符串,可省去php在字符串中寻找变量的时间
- 当字符串中需要拼接变量时,可以使用
{}
包含变量避免歧义 - 虽然正则的效率很高,但是如果可以使用php内置函数,内置函数的效率更加快,参看附录实用函数
数组相关
- 尽量使用数组操作函数操作,w3c-array
- 使用
$user['first_name']
而不是$user[first_name]
- 使用
$person=array('name'=>$name,'age'=>$age);
而不是$person['name']=$name;$person['age']=$age;
,请注意数组初始化 - 使用
implode()
而不是使用.
拼接 - 使用
array_map('addslashes',$_POST)
防注入 这里非万全之策,有的注入不需要单引号 - 尽量使用数字下标减少内存使用
- 如果数字下标为递增,可使用
$arr[]=$aaaa;
追加数组,避免另写下标 - 尽量不要对大数组在php中用
mysql_num_rows()
,更不要使用count
,尽量将在sql中使用count(0)
实现 - 大数组传参尽量使用传引用,高效利用内存
- php5.5以上版本已支持
yield
异步语法,对大数组的操作使用yield
异步可大大降低内存开销
运行结构与分支
- 使用
array_map()
而不是使用foreach
- 使用
foreach
而不是for
- 尽量避免多层
for
嵌套或foreach
嵌套,可读性差并且效率低下 - 拒绝这种写法
for($i=0;$i<strlen($arr);$i++)
- 尽量使用
switch
而不是if
嵌套 - 虽然三目运算(
bool?true return:false return
)并不比if-else
快,但是直接赋值的应用情景,可以减少内存操作
其他
使用
isset
和empty
判断变量是否存在、变量是否为空isset
为判断是否存在,empty
是首先判断是否存在再判断是否为空,以下均返回真:null、''、0、'0'、array()、false
- 善于使用静态变量
模块化编程思想,若存在代码重用,根据使用的范围,可封装为以下(把程序分解成更小的颗粒,便于修改调试)
- 局部重用:闭包函数
- 当前业务重用:私有函数
- 全局重用:框架底层
- 尽量减少链接mysql的次数,链接mysql耗时严重,多条查询语句可拼接为一条统一查询
附录
//=====php字符串部分函数=====
//过滤空白字符,包括NULL、制表符、换行、垂直制表符、回车、空格
trim(strimg,charlist)
ltrim(strimg,charlist)
ltrim(strimg,charlist)
str_ireplace(find,replace,string,count) //替换字符串中的一些字符(对大小写不敏感)
str_replace(find,replace,string,count) //替换字符串中的一些字符(对大小写敏感)
strpos(string,find,start) //查找字符串在另一字符串中第一次出现的位置(区分大小写)
strripos(string,find,start) //查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
strrpos(string,find,start) //查找字符串在另一字符串中最后一次出现的位置(区分大小写)
strlen(string) //返回字符串长度
strrev(string) //翻转字符串
strstr(string,search,before_search) //搜索字符串在另一字符串中的第一次出现
strtr(string,from,to) //转换字符串中特定的字符,有坑慎用
//=====php数组=====
//过滤符合要求的数组项
$array=array(
null,
'',
'1234',
'0',
'hello world'
);
$re = array_filter($array,function($x){
return !empty($x);
});
/*
$re=array(
2 => '1234',
4 => 'hello world'
);
*/
//遍历数组对每个项做指定操作
$array=array(
array('1','2','3','4'),
array('1','2','3','4'),
array('1','2','3','4'),
array('1','2','3','4')
);
$re = array_map(function($x){
return implode(',',$x);
},$array);
/*
$re = array(
0=> "1,2,3,4",
1=> "1,2,3,4",
2=> "1,2,3,4",
3=> "1,2,3,4"
);
*/
//=====闭包函数=====(在函数中定义的函数)
$empty = function($input){
return $input == '';
}
$out = $empty($_POST['data']) ? 'no' : 'yes' ;
//=====php生成sql=====
$data=array(
'column'=>'values'
);
$table = 'table_name';
$fields = implode(',' , array_keys($data));
$values = "'" . implode("','" , array_values($data)) . "'";
$query = "INSERT INTO {$table}($fields) VALUES($values)";
1 条评论
程序员必备的代码审查 http://blog.jobbole.com/83595/
17款代码审查工具 http://www.codeceo.com/article/17-best-code-review-tools.html
代码审查入门总结 http://www.cnblogs.com/dasn/articles/5192442.html
php代码审查基础笔记 http://www.cnblogs.com/hookjoy/p/4086094.html
三款自动化代码审查工具 http://netsecurity.51cto.com/art/201604/508992.htm