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 相关文章推荐
在PHP中执行系统外部命令
Oct 09 PHP
网站用php实现paypal整合方法
Nov 28 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
Oct 24 PHP
php实现文件下载功能的几个代码分享
May 10 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 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
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
JS 图片缩放效果代码
2010/06/09 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
浅谈JavaScript中你可能不知道URL构造函数的属性
2020/07/13 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
Python类的基础入门知识
2008/11/24 Python
Python实现抢购IPhone手机
2018/02/07 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
详解python中的Turtle函数库
2018/11/19 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
django项目中新增app的2种实现方法
2020/04/01 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
应届生个人求职信模板
2013/11/26 职场文书
财务工作个人求职的自我评价
2013/12/19 职场文书
学习自我鉴定
2014/02/01 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
学校团代会开幕词
2016/03/04 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
解决Redis启动警告问题
2022/02/24 Redis