PHP5.5 반복 Generator_php 스킬의 사용예에 대한 자세한 설명

WBOY
풀어 주다: 2016-05-16 19:56:41
원래의
897명이 탐색했습니다.

이 기사의 예에서는 PHP5.5 반복 생성기의 사용법을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

PHP5.5에서는 반복 생성기라는 개념이 도입되었습니다. 반복 생성기라는 개념은 오랫동안 PHP에 있었지만, 이는 Python3의 반복 생성기와 유사하다는 점을 살펴보세요. PHP5.5 반복 생성기는 어떻게 정의됩니까?

<&#63;php
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 값은 이것이 반복자임을 의미합니다. 이 반복자는 반복할 때마다 이 값을 생성하므로 반복 생성기 함수는 Produce할 때마다 foreach 루프를 수행할 수 있습니다. 가치.

PHP5.5 이전에는 Iterator 인터페이스를 구현하기 위해 클래스를 정의하여 반복자를 구성했습니다. Yield를 통해 반복자를 구성하면 성능이 더욱 향상되고 시스템 오버헤드가 절약됩니다.

이 방법의 장점은 분명합니다. 대규모 데이터 컬렉션을 메모리에 한 번에 로드하지 않고도 처리할 수 있으며, 심지어 무한한 규모의 데이터 스트림도 처리할 수 있습니다.

위의 예에서 볼 수 있듯이 이 반복자의 기능은 1에서 1000000까지의 숫자를 생성하여 루프에서 출력하는 것입니다. 이전 방법을 사용하여 1에서 1000000까지의 숫자를 배열로 생성하면 모든 결과는 사용 시 요청 시 생성되는 것이 아니라 미리 생성되기 때문에, 즉 xrange 반복자가 호출되면 내부 함수는 각 반복까지 실제로 실행되지 않습니다.

PHP 공식 웹사이트의 예를 살펴보세요.

<&#63;php
function xrange($start, $limit, $step = 1) {
  for ($i = $start; $i <= $limit; $i += $step) {
    yield $i;
  }
}
echo 'Single digit odd numbers: ';
/*
 * Note that an array is never created or returned,
 * which saves memory.
 */
foreach (xrange(1, 9, 2) as $number) {
  echo "$number ";
}
echo "\n";
&#63;>

로그인 후 복사

여기서 xrange는 반복이며 해당 기능은 range 함수와 동일합니다. range 함수를 사용하는 경우 함수의 내부 구현은 각 반복의 중간 프로세스를 저장합니다. 즉, 각 중간 변수에는 메모리 공간이 있습니다. , 그래서 먼저 프로그램이 사용하는 메모리 공간이 크고, 메모리를 할당하고 메모리를 재활용하면 프로그램의 실행 시간이 길어집니다. 하지만 Yield가 구현한 xrange 함수를 사용하면 그 안의 모든 중간 변수는 하나의 메모리 $i만 사용하므로 절약되는 시간과 공간은 작아집니다.

그럼 수익률은 왜 그런 영향을 미치나요? Lua의 Yield를 생각하면 코루틴의 개념이 나옵니다. Lua 언어에서는 프로그램이 Yield에 도달하면 코루틴을 사용하여 컨텍스트 환경을 기록한 다음, 메인 함수가 재개를 호출하면 코루틴이 다시 활성화되고 프로그램 작업 권한이 메인 함수에 반환됩니다. 항복 레코드가 읽혀집니다. 이는 프로그래밍 언어 수준에서 다중 코루틴 작업을 형성합니다. 여기 PHP 5.5의 Yield도 마찬가지입니다. Yield를 위해 프로그램이 실행되면 현재 프로그램은 코루틴을 호출하여 컨텍스트를 기록한 다음 기본 함수가 계속 작동합니다. 그러나 PHP에서는 이력서와 같은 키워드가 사용되지 않습니다. 하지만 "코루틴이 호출될 때 사용합니다. 예를 들어 위 예제의 foreach 반복자는 Yield를 유발할 수 있습니다. 그러므로 위의 예는 이해될 수 있다.

더 많은 PHP 관련 콘텐츠에 관심이 있는 독자는 이 사이트의 특별 주제를 확인할 수 있습니다. "PHP 운영 오피스 문서 기술 요약(워드, 엑셀, 액세스, ppt 포함)", " php 날짜 시간 사용법 요약", "php 객체 지향 프로그래밍 입문 튜토리얼", "php 문자열(문자열) 사용법 요약", "php mysql 데이터베이스 작업 입문 튜토리얼 " 및 " 일반적인 PHP 데이터베이스 작업 기술 요약 "

이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿