您当前的位置:首页>php频道>PHP原生函数一定好吗

PHP原生函数一定好吗

发布时间:2015-11-04 类型: php频道 编辑: 小猪迷

    今天在阅读kohana源码中的Arr类的时候发现了这样一个函数

    /**
    * Fill an array with a range of numbers.
    *
    * // Fill an array with values 5, 10, 15, 20
    * $values = Arr::range(5, 20);
    *
    * @param integer $step stepping
    * @param integer $max ending number
    * @return array
    */
    public static function range($step = 10, $max = 100)
    {
    if ($step < 1)
    return array();
    $array = array();
    for ($i = $step; $i <= $max; $i += $step)
    {
    $array[$i] = $i;
    }
    return $array;
    }

    看到这里的时候,我发现php的原生函数也是可以实现这个功能的,忽然想到之前听到过的一个前辈关于php性能优化的说法——PHP为我们提供了那么多的原生函数,我们尽量用原生函数解决问题。于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少。要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原生函数range()会报错“Fatal error: Cannot redeclare range() in”。

    function _range($step = 10, $max = 100)
    {
    if ($step < 1)
    return array();
    $array = array();
    for ($i = $step; $i <= $max; $i += $step)
    {
    $array[$i] = $i;
    }
    return $array;
    }
    $time['begin'] = microtime(true);
    $tmp = range(0,1000000,3);
    //$tmp = _range(0,1000000,3);
    $time['end'] = microtime(true);
    echo $time['end'] - $time['begin'].'s'."r";
    echo (memory_get_peak_usage()/1024/1024)."M";

    分别用原生函数和自定义函数进行测试,在产生0~1000000之间所有的3的倍数时,结果出乎我的意料:为了结果比较准确,我在做个图表统计

    统计次数原生函数range()自定义函数_range()
    (0,1000000,3)5.155E-3s27.5530M1.907E-5s0.1241M
    (0,1000000,2)7.479E-3s40.2688M1.811E-5s0.1241M
    (0,1000,1)8.16E-5s0.1620M2.649E-5s0.1241M
    从结果中可以看出产生随机数时自定义函数比原生函数要节省内存和时间,而且原生函数在生成大量随机数时特别耗内存,消耗时间也特别多,而自定义函数在这方面则表现得好,产生的内存和消耗的时间基本稳定,看来前面那位前辈说的不一定完全正确哦,但是这里要注意我们这里的自定义函数只能生成数字,而原生的range还可以产生字母的,但是我想这自定义函数添加个字母应该也不会太难

关键字词:PHP原生函数

  • 没有评论哦,快来抢个沙发吧
小猪迷

                

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅小猪迷公众号。

234113618

用微信扫描二维码,
加入小猪迷 QQ 群。

PHP原生函数一定好吗-小猪迷PHP[xiaozhumi.com]

今天在阅读kohana源码中的Arr类的时候发现了这样一个函数,PHP原生函数一定好吗.....

https://www.xiaozhumi.com/php/404.html