• PHP优化的总结


    今天看了下PHPBB的相关规范,觉得有很多值得学习之处。

    以下就几点PHP的优化做下总结:

    1、in_array的用法

    避免在大的数组上使用 in_array(),同时避免在循环中对包含20个以上元素的数组使用这个函数。 in_array()会非常消耗资源. 对于小的数组这种影响可能很小, 但是在一个循环中检查大数组可能会需要好几秒钟的时间。 如果您确实需要这个功能,请使用isset()来查找数组元素。实际上是使用键名来查询键值。 调用 isset($array[$var]) 会比 in_array($var, array_keys($array)) 要快得多。

    2、数组键名

    在PHP中, 使用不经单引号包含的字符串作为数组键名是合法的, 但是我们不希望如此 -- 键名应该总是由单引号包含而避免引起混淆。 注意这是使用一个字符串, 而不是使用变量做键名的情况。例如:

    // 不好的写法
    $foo = $assoc_array[blah];
    // 好的写法
    $foo = $assoc_array['blah'];
    // 不好的写法
    $foo = $assoc_array["$var"];
    // 好的写法
    $foo = $assoc_array[$var];

    3、字符串表达

    在PHP中用两种不同的方式来表示一个字符串 - 单引号或者双引号。 主要的区别在于语法解释器会对双引号表示的字符串进行变量替换, 而不会处理单引号表示的字符串。 因此您应该总是使用单引号, 除非您真的需要在字符串中处理变量。 这样, 我们可以减少程序运行消耗, 因为语法解释器不需要每次多处理一大堆根本没有变量的字符串。

    同样, 如果您在函数调用中使用了一个字符串变量作为参数, 您不需要将这个变量包含在引号里。 这会导致语法解释器多做好多无用功。 记住, 几乎所有双引号中的转义符对于单引号都是无效的。 您需要留意以上的规则, 但是有时候为了代码的可读性, 可以适当的破例。 例如:

    // 不好的写法
    $str = "This is a really long string with no variables for the parser to find.";
    do_stuff("$str");
    // 好的写法
    $str = 'This is a really long string with no variables for the parser to find.';
    do_stuff($str);
    // 有时候单引号不是那么合适
    $post_url = $phpbb_root_path . 'posting.' . $phpEx . '?mode=' . $mode . '&start=' . $start;
    // 双引号有时候能让代码行更集中
    $post_url = "{$phpbb_root_path}posting.$phpEx?mode=$mode&start=$start";

    4、循环定义中的操作

    在比较部分如果存在运算请一定要进行优化。 因为这部分会在循环中的每一步进行操作:

    // 在每次循环中sizeof函数都要被调用
       for ($i = 0; $i < sizeof($post_data); $i++)
       {
            do_something();
       }
    // 您可以在循环起始部分对这个不变的量赋值
       for ($i = 0, $size = sizeof($post_data); $i < $size; $i++)
       {
            do_something();
       }


     5、分支判断,switch case好于if else

    使用分支语句要比用很多if else好很多。

    6、不要滥用@操作符

    不要滥用@操作符,看上去很简单,但实际上用@比不用@效率要差几倍。 

    特别不要在循环中使用@。

    7、获取时间的方法

    很多时候我们习惯使用time()获取当前时间,但time()终归是一个函数,不如直接用$_SERVER['REQUEST_TIME']好一点。

    8、字符串长度判断

    两种写法:

    (1)if(strlen($str) < 5){/* do something */}

    (2)if(isset($str[5])){ /* do something */ }

    第二种写法要优于第一种。

  • 相关阅读:
    CPPFormatLibary提升效率的优化原理
    Unity4、Unity5移动平台多线程渲染在部分安卓手机上会造成闪退
    Hello World!
    Mac/IOS/linux获取当前时间包含微秒毫秒的代码
    插入图块闪烁问题的原因
    选择实体时的选项
    dataGridView 单元格添加combox checkbox
    交互拾取点时 右键取消 禁止出现点无效
    曲线上到指定点最近的点
    移除实体应用程序名(xdata)
  • 原文地址:https://www.cnblogs.com/phpfensi/p/3875259.html
Copyright © 2020-2023  润新知