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 相关文章推荐
main.php
Dec 09 PHP
php中3种方法删除字符串中间的空格
Mar 10 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
php+ajax实时输入自动搜索匹配的方法
Dec 26 PHP
PHP查询快递信息的方法
Mar 07 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
详解PHP实现执行定时任务
Dec 21 PHP
浅析Yii2 gridview实现批量删除教程
Apr 22 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
Mar 14 PHP
CI框架简单分页类用法示例
Jun 06 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入门学习笔记之一
2010/10/12 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
2020/01/23 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
2020/04/26 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
2017/04/11 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
python 性能提升的几种方法
2016/07/15 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
使用python存储网页上的图片实例
2018/05/22 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
Python实现数字的格式化输出
2020/08/01 Python
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
京剧自荐信
2014/01/26 职场文书
文明寝室标语
2014/06/13 职场文书
乡镇干部先进性教育活动个人整改措施
2014/09/16 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技