找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1601|回复: 0
打印 上一主题 下一主题

PHP原生函数一定好吗?

[复制链接]

2500

主题

2513

帖子

7520

积分

论坛元老

Rank: 8Rank: 8

积分
7520
跳转到指定楼层
楼主
发表于 2018-2-14 05:51:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            今天在阅读kohana源码中的Arr类的时候发现了这样一个函数
[U]复制代码[/U] 代码如下:
/**
  * 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
  $array = array();
  for ($i = $step; $i
  return $array;
}

    看到这里的时候,我发现php的原生函数也是可以实现这个功能的,忽然想到之前听到过的一个前辈关于php性能优化的说法——PHP为我们提供了那么多的原生函数,我们尽量用原生函数解决问题。于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少。要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原生函数range()会报错“Fatal error: Cannot redeclare range() in”。
[U]复制代码[/U] 代码如下:
function _range($step = 10, $max = 100)
{
  if ($step
    分别用原生函数和自定义函数进行测试,在产生0~1000000之间所有的3的倍数时,结果出乎我的意料:
首先是使用原生函数的结果:


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


为了结果比较准确,我在做个图表统计
统计次数 原生函数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中in_array函数用法探究
  • php字符串截取函数用法分析
  • php中数字、字符与对象判断函数用法实例
  • PHP中SimpleXML函数用法分析
  • 几个实用的PHP内置函数使用指南
  • PHP内置的Math函数效率测试
  • PHP里8个鲜为人知的安全函数分析
  • PHP使用glob函数遍历目录或文件夹的方法
  • 非常实用的PHP常用函数汇总
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端