手机版

PHP原生函数一定好吗?

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

今天,我在阅读kohana源代码中的Arr类时发现了这样一个函数

复制代码如下:/* * *用数字范围填充数组。* *//用值5,10,15,20填充数组* $ values=arr33603360范围(5,20);* * @ param integer $ step stepping * @ param integer $ max end 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;}

返回$ array}

看到这里,我发现php的原生函数也可以实现这个功能。突然想到一个前辈关于php性能优化的说法——PHP给我们提供了这么多的原生函数,我们用原生函数尽力解决问题。所以我做了一个测试,看看php原生函数的性能比我写的要快多少。要测试的函数包括本机函数范围()和上面的function _range()。下划线从这里开始,因为重写本机函数range()将报告一个错误“致命错误:无法在中重新声明range()。

复制代码如下:function _ range ($ step=10,$ max=100){ if($ step 1)return array();$ array=array();for($ I=$ step;$ i=$ max$ I=$ step){ $ array[$ I]=$ I;}返回$ array} $ time[' begin ']=micro time(true);$tmp=范围(0,1000000,3);//$tmp=_range(0,1000000,3);$ time[' end ']=micro time(true);echo $ time[' end ']-$ time[' begin ']。s。\ r ';echo(memory _ get _ peak _ usage()/1024/1024)。m ';

分别用原生函数和自定义函数测试,当0到1,000,000之间的3的倍数全部生成时,结果出乎我的意料:

第一个是使用本机函数的结果:

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

为了使结果更准确,我正在做图表统计

原始函数范围()用户自定义函数_范围()(0,100000,3)5.155 e-3s 27.5530m 1.907 e-5s 0.1241m(0,100000,2) 7.479e-3s40.2688m1.811e-5s。1)8.16 e-5s 0.1620m 2.649 e-5s 0.1241m从表中可以看出,在生成随机数时,用户自定义函数比原生函数节省内存和时间,而原生函数在生成大量随机数时特别消耗内存和时间,而用户自定义函数在这方面表现良好,生成的内存和时间基本稳定。看来前人说的未必完全正确。不过这里需要注意的是,我们的自定义函数只能生成数字,原生范围也可以生成字母,不过我觉得给这个自定义函数添加一个字母应该不会太难~

看来kohana对函数范围和这个函数在php内核中的复杂度都很了解,所以这个小优化能做得这么好,太神奇了!

版权声明:PHP原生函数一定好吗?是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。