>  기사  >  백엔드 개발  >  PHP 기본 기능은 반드시 좋은가요? _php 팁

PHP 기본 기능은 반드시 좋은가요? _php 팁

WBOY
WBOY원래의
2016-05-16 20:28:49815검색

오늘 코하나 소스코드에서 Arr 클래스를 읽다가 이런 함수를 발견했습니다

코드 복사 코드는 다음과 같습니다.

/**
  * 숫자 범위로 배열을 채웁니다.
  *
  *     // 값 5, 10, 15, 20으로 배열 채우기
  *     $values ​​= Arr::range(5, 20);
  *
  * @param   정수 $step   스테핑
  * @param   정수 $max    끝 숫자
  * @return 배열
 */
공개 정적 함수 범위($step = 10, $max = 100)
{
if ($step < 1)
배열() 반환;

$배열 = 배열();
for ($i = $step; $i <= $max; $i = $step)
{
$배열[$i] = $i;
}

$배열 반환;
}

이것을 보고 PHP의 기본 기능도 이 기능을 수행할 수 있다는 것을 알았습니다. 문득 이전에 들었던 PHP 성능 최적화에 대해 선배가 했던 말이 생각났습니다. PHP는 우리에게 많은 기본 기능을 제공하려고 노력합니다. 문제를 해결하기 위해 기본 기능을 사용합니다. 그래서 제가 직접 작성한 함수와 비교하여 기본 PHP 함수가 얼마나 빠른지 테스트해 보았습니다. 테스트할 함수에는 기본 함수 range()와 위의 함수 _range()가 포함됩니다. 기본 함수 range()를 재정의하면 "치명적인 오류: range()를 다시 선언할 수 없습니다"라는 오류가 보고되기 때문에 여기에 밑줄이 추가됩니다.

코드 복사 코드는 다음과 같습니다.

함수 _range($step = 10, $max = 100)
{
if ($step < 1)
배열() 반환;
$배열 = 배열();
for ($i = $step; $i <= $max; $i = $step)
{
$배열[$i] = $i;
}
$배열 반환;
}
$time['begin'] = 마이크로타임(true);
$tmp = 범위(0,1000000,3);
//$tmp = _range(0,1000000,3);
$time['end'] = 마이크로타임(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-3초 27.5530M 1.907E-5초 0.1241M
(0,1000000,2) 7.479E-3초 40.2688M 1.811E-5초 0.1241M
(0,1000,1) 8.16E-5초 0.1620M 2.649E-5초 0.1241M
표를 보면 커스텀 함수가 네이티브 함수에 비해 난수를 생성할 때 메모리와 시간이 절약되는 것을 알 수 있습니다. 게다가 네이티브 함수는 대량의 난수를 생성할 때 많은 메모리와 시간을 소모하는 반면, 커스텀 함수는 이보다 더 나은 성능을 발휘합니다. 잘하셨습니다. 생성된 메모리와 소비된 시간은 기본적으로 안정적입니다. 이전 선배가 말씀하신 내용이 완전히 정확하지는 않을 수 있지만 여기서 우리의 사용자 정의 기능은 숫자만 생성할 수 있다는 점에 유의해야 합니다. 네, 그런데 이 맞춤 기능에 글자를 추가하는 것은 그리 어렵지 않을 것 같아요~

Kohana 관계자는 범위 기능을 매우 잘 알고 있고, PHP 커널에서 이 기능의 복잡성도 알고 있는 것 같습니다. 그래서 이 작은 최적화가 이렇게 잘 수행될 수 있다는 것입니다. ! !

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.