PHP   发布时间:2019-11-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP原生函数一定好吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

今天在阅读kohana源码中的Arr类的时候发现了这样一个函数@H_197_1@

title"> 代码如下:
** * 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();@H_197_1@

$array = array(); for ($i = $step; $i <= $max; $i += $step) { $arraY[$i] = $i; }@H_197_1@

return $array; }

@H_197_1@

看到这里的时候,我发现php的原生函数也是可以实现这个功能的,忽然想到之前听到过的一个前辈关于php性能优化的说法——php为我们提供了那么多的原生函数,我们尽量用原生函数解决问题。于是我就做了个测试,看看php原生函数性能究竟比自己写的快多少。要测试的函数有原生函数range()和上面的函数_range(),这里加下划线开始是因为重写原生函数range()会报错“Fatal error: CAnnot redeclare range() in”。@H_197_1@

title"> 代码如下:
{ 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,3); $time['end'] = microtime(true); echo $time['end'] - $time['begin'].'s'."\r"; echo (memory_get_peak_usage()/1024/1024)."M";
@H_197_1@

分别用原生函数和自定义函数进行测试,在产生0~1000000之间所有的3的倍数时,结果出乎我的意料:@H_197_1@

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

PHP原生函数一定好吗?@H_197_1@@H_197_1@@H_197_1@

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

PHP原生函数一定好吗?@H_197_1@@H_197_1@@H_197_1@

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

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

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

大佬总结

以上是大佬教程为你收集整理的PHP原生函数一定好吗?全部内容,希望文章能够帮你解决PHP原生函数一定好吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。