정의:
1. 생성기: "콘텐츠를 동적으로 생성하는 배열", 값이 사용될 때만 생성됩니다.
2. 키워드 Yield foreach
권장: "php training"
Process:
1. 생성기에서 배열을 정의하는 것과 동일합니다.
2. 각 수율 발생은 배열에 나타나는 값을 정의하는 것과 동일합니다.
3.foreach는 생성기에서 모든 수율 정의 값(정의된 값(표현식))을 순회하며, 기타 현재 Yield와 이전 Yield 사이의 표현식은 실행되고, 현재 Yield 이후의 표현식은 실행되지 않습니다.)
4. foreach가 정상적으로 종료되면(break 아님) 생성기에서 마지막 표현식을 확인합니다. 그렇다면 실행하세요.
5. 스레드와 달리 병렬로 실행되지 않습니다. 단지 실행을 앞뒤로 전환하므로 공간이 절약됩니다. 그리고 시간도 절약되지 않습니다.
계획된 사용 시나리오:
1. 빅데이터 파일을 가져와서 생성기에서 한 줄씩 읽습니다.
2.? ? ?
예:
gen.php
<?php function gen() { echo '生成器开始执行' . PHP_EOL; for ($i = 0; $i < 5; $i++) { echo '产生数据之前:' . $i . PHP_EOL; yield $i; echo '产生数据之后:' . $i . PHP_EOL; } echo '再来一个数据' . PHP_EOL; yield 5; echo '生成器执行结束' . PHP_EOL; } $gen_func = gen(); echo '生成器开始执行了吗?' . PHP_EOL; foreach ($gen_func as $key => $val) { echo '使用数据前' . PHP_EOL; echo '使用数据:' . $val . PHP_EOL; echo '使用数据后' . PHP_EOL; //if ($key >= 4) { //break; //} }
실행 결과:
php gen.php 生成器开始执行了吗? 生成器开始执行 产生数据之前:0 使用数据前 使用数据:0 使用数据后 产生数据之后:0 产生数据之前:1 使用数据前 使用数据:1 使用数据后 产生数据之后:1 产生数据之前:2 使用数据前 使用数据:2 使用数据后 产生数据之后:2 产生数据之前:3 使用数据前 使用数据:3 使用数据后 产生数据之后:3 产生数据之前:4 使用数据前 使用数据:4 使用数据后 产生数据之后:4 再来一个数据 使用数据前 使用数据:5 使用数据后 生成器执行结束
실행 프로세스 일부 해석:
라인 1과 14는 생성기 gen()을 호출하지 않고 정의만 합니다.
2. gen() 호출을 시작합니다.
3. $val에 값이 필요하면 생성기를 실행합니다.
4. , 현재 위치 b를 기억하고
5. 루프 3단계와 4단계를 반복하고, 마지막으로 정의된 위치를 실행한 후
;7. 20을 제거하고 21, 22행의 "데이터 사용: 4 데이터 사용 후" 주석 이후 실행하면 다른 출력이 없습니다.
기타 (PHP7.1.14 버전만 확인)1, value);//YES value;//NO
2 PHP7 이후에는 Yield from을 호출할 수 있습니다. 컨테이너, 배열, 반환 등을 사용하여 생성합니다.
더 많은 프로그래밍 관련 콘텐츠를 보려면 PHP 중국어 웹사이트
프로그래밍 튜토리얼칼럼을 주목해주세요!
위 내용은 PHP 생성기 - 콘텐츠 배열을 동적으로 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!