일반적으로 데이터 세트를 반복할 때 데이터를 생성해야 합니다. 배열이 매우 크면 성능을 많이 소모하고 메모리 부족으로 인해 오류가 발생할 수도 있습니다.
예:
//Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in D:\php\test\index.php on line 5range(1, 100000000);
PHP5.5 반복 생성기 소개 반복의 개념은 오랫동안 PHP에 있었지만, 반복 생성기는 PHP의 새로운 기능입니다. 이는 Python3의 반복 생성기와 유사합니다. PHP5.5의 반복 생성기가 어떻게 정의되는지 살펴보겠습니다. .
다음 예제는 생성기를 구현합니다. 배열 요소가 생성될 때마다 Yield 키워드와 함께 반환되며, 함수 next 메서드가 실행되면 다음에서 실행이 계속됩니다. 예를 들어 중간 변수 $i만 생성됩니다.
function xrange($start, $limit, $step = 1) { for ($i = $start; $i <= $limit; $i += $step) { yield $i; } } foreach (xrange(1, 9, 1) as $number) { echo "$number "; }
xrange 여기서는 반복이며 해당 기능은 range 함수와 동일합니다. 함수의 내부 구현은 각 반복의 중간 프로세스를 저장합니다. 즉, 각 중간 변수에는 메모리 공간이 있으므로 우선 프로그램에서 사용하는 메모리 공간이 커지고 메모리 할당 및 메모리 재활용으로 인해 프로그램 실행 시간이 길어집니다. 하지만 Yield가 구현한 xrange 함수를 사용하면 그 안의 모든 중간 변수는 하나의 메모리 $i만 사용하므로 절약되는 시간과 공간은 작아집니다.
그럼 수익률은 왜 그런 영향을 미치나요? Lua의 Yield를 생각하면 코루틴의 개념이 나옵니다. Lua 언어에서는 프로그램이 Yield에 도달하면 코루틴을 사용하여 컨텍스트 환경을 기록한 다음, 메인 함수가 재개를 호출하면 코루틴이 다시 활성화되고 프로그램 작업 권한이 메인 함수에 반환됩니다. 항복 레코드가 읽혀집니다. 이는 프로그래밍 언어 수준에서 다중 코루틴 작업을 형성합니다. 여기 PHP 5.5의 Yield도 마찬가지입니다. Yield를 위해 프로그램이 실행되면 현재 프로그램은 코루틴을 호출하여 컨텍스트를 기록한 다음 기본 함수가 계속 작동합니다. 그러나 PHP에서는 이력서와 같은 키워드가 사용되지 않습니다. 하지만 "코루틴이 호출될 때 사용합니다. 예를 들어 위 예제의 foreach 반복자는 Yield를 유발할 수 있습니다. 그러므로 위의 예는 이해될 수 있다.
또 다른 예:
function xrange($start, $end, $step = 1) { for ($i = $start; $i <= $end; $i += $step) { yield $i; } }foreach (xrange(1, 1000000) as $num) { echo $num, "\n"; }
키워드: Yield를 참고하세요. 이것은 이 함수 xrange와 이전 함수의 차이점입니다. 일반적으로 값이 반환되는데, Yield 값은 이것이 반복자임을 의미합니다. 이 반복자는 반복할 때마다 이 값을 생성하므로 반복 생성기의 함수는 각각 foreach 루프를 수행할 수 있습니다. 시간 값을 생성합니다.
PHP5.5 이전에는 Iterator 인터페이스를 구현하기 위해 클래스를 정의하여 반복자를 구성했습니다. 항복을 통해 반복자를 구성하면 성능이 더욱 향상되고 시스템 오버헤드가 절약됩니다.
이 방법의 장점은 분명합니다. 대용량 데이터 컬렉션을 메모리에 한꺼번에 로드하지 않고도 처리할 수 있으며, 무한히 큰 데이터 스트림도 처리할 수 있습니다.
위의 예에서 볼 수 있듯이 이 반복자의 기능은 1에서 1000000까지의 숫자를 생성하여 루프에서 출력하는 것입니다. 이전 방법을 사용하여 1에서 1000000까지의 숫자를 배열로 생성하는 경우 모든 결과는 사용될 때 요청 시 생성되는 것이 아니라 미리 생성되어야 하기 때문에 메모리가 많이 필요합니다. 즉, xrange 반복자가 호출되면 내부 함수는 각 반복이 수행될 때까지 실제로 실행되지 않습니다.
관련 권장 사항:
위 내용은 PHP 생성기를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!