PHP 반복자 생성기 소개
이 기사에서는 특정 참조 가치가 있는 PHP 반복자 생성기를 주로 소개합니다. 이제 모든 사람과 공유합니다. 필요한 친구가 참조할 수 있습니다.
Iteration 및 반복자
Iteration은 프로세스의 반복 실행을 의미합니다. 실행을 반복이라고 합니다. 예를 들어 일반적인 순회는 반복입니다.
$arr = [1, 2, 3, 4, 5];foreach($arr as $key => $value) { echo $key . ' => ' . $value . "\n";}
foreach
가 배열을 순회하고 해당 내용을 반복적으로 출력하는 것을 볼 수 있습니다. foreach
내에서 각 반복은 현재 요소의 값을 $value
에 할당하고 배열 포인터를 다음 요소로 이동하여 다음 반복을 준비하므로 순차적 순회를 구현합니다. . 외부 함수가 자체 내부 데이터를 반복할 수 있도록 하는 인터페이스는 Iterator 인터페이스
이고, 해당 반복 자체는 Iterator 객체
입니다. foreach
对数组遍历并迭代输出其内容。在foreach
内部,每次迭代都会将当前的元素的值赋给$value
并将数组的指针移动指向下一个元素为下一次迭代做准备,从而实现顺序遍历。像这样能够让外部的函数迭代自己内部数据的接口就是迭代器接口
,对应的那个被迭代的自己就是迭代器对象
。
PHP提供了统一的迭代器接口:
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 boolean valid(void)}
通过实现Iterator接口
,我们可以自行的决定如何遍历对象。
foreach之所以能工作,是因为这些集合类都实现了Iterable接口,该接口中定义了Iterator迭代器的产生方法,并且foreach就是通过Iterable接口在序列中进行移动。
yield和生成器
相比较迭代器,生成器提供了一种更容易的方法来实现简单的对象迭代
,性能开销和复杂性都大大降低。
一个生成器函数看起来像一个普通的函数,不同的是普通函数返回一个值,而生成器可以yield
生成许多个值,并且每一次的yield只是暂停当前的执行状态,当下次调用生成器函数时,PHP会从上次暂停的状态继续执行下去。
我们在使用生成器的时候可以像关联数组那样指定一个键名对应生成的值。如下生成一个键值对与定义一个关联数组相似。
function xrange($start, $limit, $step = 1) { for ($i = $start, $j = 0; $i <= $limit; $i += $step, $j++) { // 给予键值 yield $j => $i; } }$xrange = xrange(1, 10, 2);foreach ($xrange as $key => $value) { echo $key . ' => ' . $value . "\n";}
概念理解
首先明确一个概念:生成器yield关键字不是返回值,他的专业术语叫产出值,只是生成一个值。实际上生成器函数返回的是一个Generator
对象,这个对象不能通过new实例化,并且实现了Iterator
PHP는 통합된 반복자 인터페이스를 제공합니다.
<?php header("content-type:text/html;charset=utf-8"); function readTxt() { # code... $handle = fopen("./test.txt", 'rb'); while (feof($handle)===false) { # code... yield fgets($handle); } fclose($handle); } foreach (readTxt() as $key => $value) { # code... echo $value.'<br />'; }
반복자 인터페이스
를 구현하면 객체를 탐색하는 방법을 스스로 결정할 수 있습니다. Foreach는 이러한 컬렉션 클래스가 모두 Iterator의 생성 방법을 정의하는 Iterable 인터페이스를 구현하고 foreach가 Iterable 인터페이스를 통해 순서대로 이동하기 때문에 작동합니다. yield 및 생성기반복기와 비교하여 생성기는 성능 오버헤드와 복잡성을 크게 줄이면서 간단한 객체 반복
을 구현하는 더 쉬운 방법을 제공합니다. 생성기 함수는 일반 함수처럼 보이지만, 일반 함수는 값을 반환하는 반면, 생성기는 많은 값을 생성할 수 있으며, 각 생성은 현재 실행 상태를 일시 중지한다는 점입니다. 다음에 생성기 함수가 호출되면 PHP는 마지막으로 일시 중지된 상태에서 계속 실행됩니다. 생성기를 사용할 때 연관 배열처럼 생성된 값에 해당하는 키 이름을 지정할 수 있습니다. 다음과 같이 키-값 쌍을 생성하는 것은 연관 배열을 정의하는 것과 유사합니다. rrreee개념적 이해
먼저 개념을 명확히 합시다: 생성기의 Yield 키워드는 반환 값이 아니며 전문 용어로 출력 값이라고 하며 단지 값을 생성합니다. 실제로 생성기 함수는 new를 통해 인스턴스화할 수 없고 Iterator
인터페이스를 구현하는 Generator
객체를 반환합니다. 그럼
foreach 코드에서 반복되는 것은 무엇인가요? PHP가 생성기를 사용하면 Generator 클래스의 객체가 반환됩니다. foreach는 이 객체를 반복할 수 있습니다. 각 반복마다 PHP는 Generator 인스턴스를 통해 다음에 반복해야 하는 값을 계산합니다. 이런 방식으로 foreach
는 다음에 반복해야 할 값을 알게 됩니다. 게다가 for
- 루프가 실행되면 즉시 중지됩니다. 다음에 루프할 때
foreach
가 for
에 다음 값을 다시 요청할 때까지 기다립니다. 그러면 루프가 다시 실행되고 즉시 다시 중지됩니다. 조건이 충족되지 않을 때까지 실행되지 않습니다. - 생성기의 장점
생성기는 PHP 애플리케이션의 성능에 매우 큰 영향을 미칩니다.
PHP 코드가 실행될 때 많은 메모리를 절약합니다
실제 개발 응용 프로그램: 매우 큰 파일 읽기
PHP 개발에서는 csv 파일, 텍스트 파일 또는 일부 로그 파일과 같은 대용량 파일을 읽어야 하는 경우가 많습니다. 5G와 같이 파일이 큰 경우. 이때 모든 내용을 한꺼번에 메모리에 직접 읽어들이는 것은 실용적이지 않습니다. 생성기를 사용하여 파일을 읽으세요. 첫 번째 줄은 처음으로 읽고, 두 번째 줄은 두 번째로 읽는 식입니다.
위 내용은 PHP 반복자 생성기 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Alipay PHP ...

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.
