Home  >  Article  >  Backend Development  >  Use PHP native functions whenever possible?

Use PHP native functions whenever possible?

WBOY
WBOYOriginal
2016-08-08 09:32:581127browse

I discovered such a function today while reading the Arr class in the kohana source code

	/**
	 * 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";

Using native functions and custom functions for testing respectively, when generating all multiples of 3 between 0 and 1000000, the results were beyond my expectations:

The first is the result of using the native function:

The following is the result of using the custom function:

In order to make the results more accurate, I am making a chart and statistics

Number of statistics Native function range() Custom function_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

It can be seen from the table that custom functions save memory and time when generating random numbers compared to native functions. Moreover, native functions consume a lot of memory and time when generating a large number of random numbers, while custom functions are less efficient in this regard. The performance is good, the memory generated and the time consumed are basically stable. It seems that what the previous senior said may not be completely correct, but it should be noted here that our custom function here can only generate numbers, while the native range can also generate Letters, but I think it shouldn’t be too difficult to add letters with this custom function~

It seems that the Kohana official has a good understanding of the range function and the complexity of this function in the PHP kernel. That’s why this small optimization can do so well. It’s amazing! ! !

send Me~

The above introduces how to use PHP native functions as much as possible? , including relevant content, I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn