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 各种应用乱码问题的解决方法
May 09 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
深入分析php之面向对象
May 15 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
PHP实现的简单缓存类
Jul 29 PHP
提高php编程效率技巧
Aug 13 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 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中显示格式化的用户输入
2006/10/09 PHP
mysql建立外键
2006/11/25 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
深入理解基于vue-cli的vuex配置
2017/07/24 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
Python MD5文件生成码
2009/01/12 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
会计系个人求职信范文分享
2013/12/20 职场文书
接待员岗位责任制
2014/02/10 职场文书
事业单位考核材料
2014/05/21 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
创业计划书之服装
2019/10/07 职场文书
python创建字典及相关管理操作
2022/04/13 Python