• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

尽可能使用PHP原生函数?

php 搞代码 3年前 (2022-01-23) 20次浏览 已收录 0个评论

今天在阅读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的倍数时,结果出乎我的意料:

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

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

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

统计次数 原生函数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内核中该函数的复杂度也很了解,所以这个小优本&文来源gao@daima#com搞(%代@#码网@化才可以做这么好,太厉害了!!!

send Me~

以上就介绍了尽可能使用PHP原生函数?,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:尽可能使用PHP原生函数?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址