PHP에서 동적으로 콘텐츠를 생성하는 배열(생성기) 구문 분석

不言
풀어 주다: 2023-04-03 15:18:02
원래의
2487명이 탐색했습니다.

이 글은 PHP에서 동적으로 생성된 콘텐츠의 배열(생성기) 분석을 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

정의:

Generator: "동적으로 생성된 콘텐츠의 배열", 값이 사용될 때만 생성됩니다.
사용 방법: 키워드 항복 foreach

프로세스:

  1. 생성기 메서드로서 배열을 정의하는 것과 같습니다.

  2. 생성기에서 각 발생은 배열을 정의하는 것과 같습니다.

  3. foreach는 생성기에서 모든 Yield 정의 값(정의된 값(표현식))을 순회하며, 사용되는 경우에만 현재 Yield와 이전 Yield 사이의 다른 표현식이 실행되며, 현재 항복 이후의 표현식은 실행되지 않습니다);

  4. foreach는 정상적으로 종료됩니다(중단되지 않음). 생성기에서 마지막 항복 이후에 실행되지 않은 다른 표현식이 있는지 확인합니다. 그렇다면 실행합니다.

  5. 스레드와는 다릅니다. 병렬로 실행되지 않으며, 주 비즈니스 로직과 생성기 사이에서 실행을 앞뒤로 전환할 뿐입니다. 이는 공간만 절약하고 시간은 절약하지 않습니다.

PHP에서 동적으로 콘텐츠를 생성하는 배열(생성기) 구문 분석

계획된 사용 시나리오:

1. 빅데이터 파일을 가져와서 생성기에서 한 줄씩 읽습니다. ? ?


예:

  gen.php
  1 <?php   2 function gen()
  3 {
  4     echo &#39;生成器开始执行&#39; . PHP_EOL;
  5     for ($i = 0; $i < 5; $i++) {
  6         echo &#39;产生数据之前:&#39; . $i  . PHP_EOL;
  7         yield $i; 
  8         echo &#39;产生数据之后:&#39; . $i  . PHP_EOL;
  9     }   
 10     echo &#39;再来一个数据&#39; . PHP_EOL;
 11     yield 5;
 12     echo &#39;生成器执行结束&#39; . PHP_EOL;
 13 }   
 14 $gen_func = gen();
 15 echo &#39;生成器开始执行了吗?&#39; . PHP_EOL;
 16 foreach ($gen_func as $key  => $val) {
 17     echo '使用数据前' . PHP_EOL;
 18     echo '使用数据:' . $val . PHP_EOL;
 19     echo '使用数据后' . PHP_EOL;
 20     //if ($key >= 4) {
 21         //break;
 22     //} 
 23 }
로그인 후 복사

실행 결과:

php gen.php

생성기가 실행을 시작했습니까?

생성기가 실행을 시작합니다
데이터 생성 전:0
데이터 사용 전
데이터 사용 전:0
데이터 사용 후
데이터 생성 후:0
데이터 생성 전:1
데이터 사용 전
데이터 사용 전:1
데이터 사용 후
데이터 생성 후: 1
데이터 생성 전: 2
데이터 사용 전
데이터 사용: 2
데이터 사용 후
데이터 생성 후: 2
데이터 생성 전: 3
데이터 사용 전
데이터 사용: 3
데이터 사용 후
데이터 생성 후: 3
데이터 생성 전: 4
데이터 사용 전
데이터 사용 후: 4
데이터 사용 후
데이터 생성 후: 4
다른 데이터
데이터 사용 전
데이터 사용 전: 5
데이터 사용 후
Generator End of 실행

실행 프로세스 일부 해석:

1. 14번째 줄은 생성기 gen()을 호출하지 않고 단지 정의합니다.

2. .$val 값이 필요한 경우 현재 위치 a를 기억하고 생성기를 실행합니다.

4. Yield에 의해 정의된 위치로 실행하고 값을 가져온 다음 현재 위치 b를 기억하고 a 위치로 돌아갑니다. 3단계와 4단계에서;
6. 루프가 종료되고 마지막으로 정의된 Yield 위치 이후의 나머지 부분이 실행됩니다.
7. 20, 21, 22행의 주석을 제거하고 4 이후를 실행합니다. 데이터 사용 중"이면 더 이상 다른 출력이 없습니다.


기타 (PHP7.1.14 버전만 확인됨)

1. $data = (yield $value);//YES $data = Yield $value;//NO2를 사용할 수 있습니다. ; $val;3. PHP7 이후에는 생성기, 배열을 호출하고 반환 등을 사용할 수 있습니다.

(포털: PHP 매뉴얼에서 확인 가능)


관련 추천 글:

PHP7 제너레이터의 새로운 기능: 제너레이터 대리자(yield-from) 및 반환 값(return-value)

PHP 생성 제너레이터의 간단한 분석

위 내용은 PHP에서 동적으로 콘텐츠를 생성하는 배열(생성기) 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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