PHP原生函数一定好吗?


Posted in PHP onDecember 08, 2014

今天在阅读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的倍数时,结果出乎我的意料:

首先是使用原生函数的结果:

PHP原生函数一定好吗? 

下面是使用自定义函数的结果:

PHP原生函数一定好吗? 

为了结果比较准确,我在做个图表统计

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

    看来kohana官方对range这个函数很是了解,对php内核中该函数的复杂度也很了解,所以这个小优化才可以做这么好,太厉害了!!!

PHP 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
图书管理程序(一)
Oct 09 PHP
PHP 类型转换函数intval
Jun 20 PHP
PHP生成RSS文件类实例
Dec 05 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
浅谈使用PHP开发微信支付的流程
Oct 04 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 PHP
thinkphp中ajax与php响应过程详解
Dec 08 #PHP
一款简单实用的php操作mysql数据库类
Dec 08 #PHP
php表单敏感字符过滤类
Dec 08 #PHP
php网页病毒清除类
Dec 08 #PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 #PHP
简单实用的PHP防注入类实例
Dec 05 #PHP
ThinkPHP连接数据库的方式汇总
Dec 05 #PHP
You might like
php实现以只读方式打开文件的方法
2015/03/16 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
详解React 元素渲染
2020/07/07 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
python线程、进程和协程详解
2016/07/19 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
创建青年文明号材料
2014/05/09 职场文书
法学院毕业生求职信
2014/06/25 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
人口与计划生育责任书
2015/05/09 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript