>  기사  >  백엔드 개발  >  PHP의 반복자와 생성기 분석 및 장점과 단점 소개

PHP의 반복자와 생성기 분석 및 장점과 단점 소개

不言
不言원래의
2018-08-11 16:57:562559검색

이 글은 PHP의 반복자와 생성자의 장점과 단점을 분석하고 소개한 내용입니다. 특정 참고 가치가 있으며 도움이 필요한 친구들이 참고할 수 있기를 바랍니다. 너.

1. Iterator

Analytic: 생각해 보세요. 컬렉션 개체와 컬렉션 개체에 대한 작업을 함께 배치하면 컬렉션 개체의 요소를 다른 방식으로 순회하려는 경우 "단일 책임 원칙"을 위반하는 컬렉션 개체를 수정해야 하며 반복자 패턴은 결합됩니다. 데이터 구조와 데이터 구조의 알고리즘은 분리되어 있으며 둘은 독립적으로 개발될 수 있습니다.

장점:

1. 예를 들어, 순서가 지정된 목록에서는 필요에 따라 정방향 순회 및 역순 순회를 위한 두 개의 반복자를 제공합니다. 사용자는 단순화된 집계 클래스

2에서 순회 작업을 수행하기 위해 반복자를 가져오기만 하면 됩니다. 반복자의 도입으로 인해 원본 컬렉션 개체는 컬렉션 요소 자체를 순회할 필요가 없습니다

3 새로운 집계 클래스와 반복자 클래스를 추가하는 것이 매우 편리하며 두 차원이 가능합니다. 독립적으로 변경됨#🎜 🎜#

4. 서로 다른 컬렉션 구조에 대한 통합 인터페이스를 제공하여 동일한 알고리즘이 서로 다른 컬렉션 구조에서 작동하도록 지원

단점: # 🎜🎜#1. 반복자 패턴은 데이터 저장과 데이터 탐색의 책임을 분리합니다. 새 컬렉션 개체를 추가할 때 해당 반복자 클래스를 추가해야 합니다. 정도

특정 인터페이스:

Iterator extends Traversable {
/* 方法 */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public bool valid ( void )
}

2. Generator

PHP 생성기(generator)는 PHP5입니다. 5.0에 도입된 함수는 표준 PHP 반복자와 다릅니다. PHP 생성기는 클래스에서 Iterator 인터페이스를 구현할 필요가 없으므로 생성기가 값을 계산하고 출력합니다. 성능에 상당한 영향을 미치는 요구 사항에 따라 반복됩니다. 영향 표준 PHP 반복자가 메모리에서 반복을 자주 수행하고 데이터 세트를 미리 계산해야 한다면 성능이 낮을 것이라고 상상해 보십시오. 대량의 데이터를 계산하기 위해 특정 방법을 사용하면 성능에 미치는 영향이 더욱 커집니다. 이때 생성기를 사용하면 귀중한 메모리 자원을 차지하지 않고도 후속 값을 즉시 계산하고 출력할 수 있습니다.

장점: 메모리 사용량이 적고 성능이 좋습니다. 생성기의 내부 상태는 값을 생성할 때마다 일시 중지되며, 생성기가 다음 값을 요청할 때 복원됩니다. 생성기의 내부는 루프가 완료되거나 일시 중지 위치가 될 때까지 일시 중지와 재개 사이를 계속 전환합니다

단점:

1. PHP 생성기는 모든 반복자의 요구 사항을 충족할 수 없습니다. , 쿼리하지 않으면 생성기는 반복할 다음 값이 무엇인지 결코 알 수 없으며 생성기에서 뒤로 또는 앞으로 이동할 방법이 없기 때문입니다.

2. 생성기는 여전히 일회성이므로 동일한 생성기를 여러 번 반복할 수 없습니다. 그러나 필요한 경우 생성기를 다시 빌드하거나 복제할 수 있습니다.

생성기 만들기:

1 생성기는 PHP 함수이므로 함수에서 Yield 키워드를 사용합니다. 일반 PHP 함수와 달리 생산자는 값을 반환하지 않으며 값만 생성합니다.

<?php
function myGenerator(){
    yield &#39;a&#39;;
    yield &#39;b&#39;;
    yield &#39;c&#39;;
}

2. 생성기 함수를 호출하면 PHP는 Generator 클래스에 속하는 객체를 반환합니다. 이 객체는 foreach() 함수를 사용하여 반복될 수 있습니다. 각 반복마다 PHP는 Generator 인스턴스에 반복할 다음 값을 계산하고 제공하도록 요청합니다

<?php
function makeRange($length){
    for($i = 0; $i<$length; $i++){
        yield $i;
    }
}

foreach(makeRange(1000000) as $i){
    echo $i,PHP_EOL;
}

위에 표시된 대로: $length가 크고(수백만) 생성기를 사용하지 않는 경우 같은 시간 그렇다면 100만에서 1005개의 정수로 구성된 배열에 대해 메모리를 미리 할당해야 합니다. PHP 생성기는 동일한 작업을 수행할 수 있지만 한 번에 하나의 정수에만 메모리를 할당합니다. (코드 예)

Code PHP와 HTML 양식 간의 간단한 상호 작용을 위해

위 내용은 PHP의 반복자와 생성기 분석 및 장점과 단점 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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