更新于 2013-02-20 16:07:18 UEANER

基本

1. 使用单引号代替双引号(在含有变量的情况下)
    echo "string";
    echo 'string ' . $var;

2. 数组下标加引号
    $arr['key']
    $arr[$key]

3. 使用 $i += 2 代替 $i = $i + 2

4. 使用 ++$i 代替 $i++ (仅适用于PHP)

5. 尽量避免使用 continue(可以通过适当的构造)

6. 避免在 for 循环条件语句中使用函数
    for ($i = 0, $len = strlen($str); $i < $len; ++$i) {
        // 尽量避免在循环内部声明变量,尤其是大变量:对象/数组
        // do something
    }

7. 数组循环使用 foreach 代替 for
    foreach ($user_list as $user) {
        // 避免在循环内部执行 SQL 语句,mysqli_query('...')
        // do something
    }

8. 使用 include/require 代替 include_once/require_once

9. 在 include/require 中使用绝对路径
    define('BASEPATH', dirname(__FILE__));
    include BASEPATH . '/path/to/file.php';

10. 使用三目运算代替 if else

11.使用 switch case 代替 if elseif ... else

12.尽量避免使用错误控制运算符"@"(错误是用来解决的,不是用来忽略的)

13.避免多层嵌套

14.不要没有原因的复制一个变量(如:变量只用一次。如果是作为函数N多参数的一员,可以换行)

15.尽可能使用局部变量代替全局变量和对象属性(变量先声明后使用)

16.适当的使用大变量和全局变量,用完 unset 掉

17.使用 NULL === 代替 is_null

18.尽量使用 === 代替 ==

类/函数

19.类方法尽可能声明为 static 静态方法

20.在子类里方法的性能优于在基类中

21.避免 setter/getter

22.尽可能使用PHP内部函数(在写一个函数时很有可能PHP本身已经具有相同功能或类似功能的函数)

22.避免调用空函数

23.函数参数尽可能使用 string/int/bool 类型

24.通过引用传递参数来使一个函数有多个返回值

25.使用 file_get_contents 代替 file/fopen/feof/fgets 获取文件内容(另:尽可能少的进行文件操作)

26.使用 $_SERVER['REQUEST_TIME'] 代替 time() (如果对时间的精确度要求不高)

27.尽量避免使用递归

28.使用 list 来实现一次获取 explode 后的特定段值
    list( , $mid) = explode(';', $string);

29.判断字符串长度,可以使用 isset($str{6}) 代替 strlen($str) > 6
    if (isset($str{6})) {
        // password length OK, do something
    }

30.在验证 email 地址的时候使用 checkdnsrr() 函数验证域名是否存在

31.使用 highlight_file() 函数打印出格式化很漂亮的源代码

32.尽量避免使用正则(检查是否可以使用 strtr/strncasecmp/strpbrk/stripos/str_replace 来代替)
33.使用 mysqli/pdo_mysql 模块代替 mysql 模块

34.使用 mysqlnd 模块代替 libmysql    [php5.3+]

35.优化 SELECT SQL 语句,在可能的情况下尽量少的进行 INSERT、UPDATE 操作

36.使用 gzcompress() 函数压缩容量大的字符串存入数据库,取出后使用 gzuncompress() 进行解压

37.使用 ip2long() 函数把 IP 地址转化成整型存入数据库,取出后使用 long2ip() 转回 IP

其他

38.看一下你的项目是不是必须面向对象,很多时候面向过程可以更容易解决且效率更高

39.看一下你的项目中可复用的模块或 lib,PEAR 里边或许已经有了

40.并非要用类实现所有的数据结构,数组也很有用

41.合理的拆分你的代码进行复用    [DRY]

42.如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们

43.使用 xdebug/xhprof 等工具分析你的代码,以找到瓶颈

44.使用缓存:data层,view层,opcode 等(memcached,smarty,apc 等工具)

45.使用缓冲区

46.开发模式显示所有错误,生产模式关闭所有错误记录错误日志
    开发模式:
    `php code`
    error_reporting(-1);
    ini_set('display_errors', 1);

    生产模式:
    `php.ini`
    display_errors = Off
    log_errors = On
    error_log = "/var/log/php_errors.log"

47.用 FALSE 表示错误,用 NULL 表示不存在
    对于操作类的函数,失败返回 FALSE,表示"操作失败了"
    而对于查询类的函数,如果找不到想要的值,则应该返回 NULL,表示"找不到"

48.保持你的 PHP 版本为最新

49.Keep it Simple, Stupid.    [KISS]

参考

风雪之隅: http://www.laruence.com/2011/03/24/858.html
51cto开发频道: http://developer.51cto.com/art/201105/265953.htm
google developers: https://developers.google.com/speed/articles/optimizing-php
转载请注明出处。
本文地址:http://blog.aboutc.net/optimization/13/php-code-optimization-tips

评论:1

ask 2016-01-26 17:19:15
very nice!
关闭高亮高亮 分享到新浪微博分享到新浪微博