本文基于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快,但是直接赋值的应用情景,可以减少内存操作

其他

  • 使用issetempty判断变量是否存在、变量是否为空

    • 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)";
最后修改:2017 年 04 月 05 日 03 : 34 PM