> 백엔드 개발 > PHP 튜토리얼 > PHP 생성기 구문 세부정보 분석

PHP 생성기 구문 세부정보 분석

伊谢尔伦
풀어 주다: 2016-11-23 09:10:13
원래의
1209명이 탐색했습니다.

생성기 함수는 단일 값을 반환하는 대신 요청 시 여러 값을 생성한다는 점을 제외하면 일반 함수와 동일합니다.

생성기 함수가 호출되면 다음을 반환합니다. 반복 가능한 객체입니다. 해당 객체를 반복하면(예: foreach 루프를 통해) PHP는 값이 필요할 때마다 생성기 함수를 호출한 다음 생성기가 값을 생성할 때 생성된 값을 저장합니다. 다음 값이 필요할 때 복원됩니다.

더 이상 값이 생성되지 않으면 생성기 함수는 간단히 종료될 수 있으며 호출 코드는 배열이 해당 값을 모두 사용한 것처럼 계속됩니다.

참고:

생성기는 값을 반환할 수 없습니다. 그렇게 하면 컴파일 오류가 발생합니다. 생성기의 빈 반환 문은 유효한 구문이며 생성기가 중단됩니다.

산출 키워드

생성기 함수의 핵심은 Yield 키워드입니다. 가장 간단한 형태의 Yield 문은 생성기를 보기 위한 값을 제공한다는 점을 제외하고는 return 문과 매우 유사합니다. , 값을 반환한 다음 실행을 중지하는 대신.

예제 #1 값 생성의 간단한 예

<?php
    function gen_one_to_three() {
        for ($i = 1; $i <= 3; $i++) {
            // Note that $i is preserved between yields.
            yield $i;
        }
    }
    $generator = gen_one_to_three();
    foreach ($generator as $value) {
         echo "$value\n";
    }
?>
로그인 후 복사

위 루틴은 다음을 출력합니다.

1
2
3
로그인 후 복사

참고:

내부적으로 직렬화된 정수 키는 비연관 배열처럼 출력 값과 쌍을 이룹니다.

주의 사항 항복을 사용할 때(예: 등호 오른쪽에 대입문) 괄호를 사용해야 합니다. 예를 들어 다음 코드는 정확합니다.

$data = (yield $value);

그러나 다음 코드는 구문 분석 오류를 발생시킵니다.

$data = Yield $value;

이 구문은 생성기 개체의 send() 메서드와 함께 사용할 수 있습니다.

사용 값을 얻는 키

PHP는 연관 배열과 생성기를 지원하며, 위와 같이 간단한 값을 생성하는 것 외에도 동시에 키를 생성할 수도 있습니다.

키 생성 /값 쌍의 구문은 매우 간단하며 아래와 같이 연관 배열을 정의하는 데 사용할 수 있습니다.

예제 #2 키/값 쌍 생성

<?php
    /* The input is semi-colon separated fields, with the first
     * field being an ID to use as a key. */
    $input = <<<&#39;EOF&#39;
1;PHP;Likes dollar signs
2;Python;Likes whitespace
3;Ruby;Likes blocks
EOF;
    function input_parser($input) {
        foreach (explode("\n", $input) as $line) {
            $fields = explode(&#39;;&#39;, $line);
            $id = array_shift($fields);
            yield $id => $fields;
        }
    }
    foreach (input_parser($input) as $id => $fields) {
        echo "$id:\n";
        echo " $fields[0]\n";
        echo " $fields[1]\n";
    }
?>
로그인 후 복사

위 루틴은 다음을 출력합니다. :

1:
    PHP
    Likes dollar signs
2:
    Python
    Likes whitespace
3:
    Ruby
    Likes blocks
로그인 후 복사

주의 사항은 이전 세대의 단순 값과 동일합니다. 컨텍스트 표현식에서 키/값 쌍을 생성하려면 항복 문을 괄호로 묶어야 합니다.

$data = (yield $key => $value);
로그인 후 복사

Null 값 생성

매개 변수 없이 Yield를 호출하여 자동 생성된 키를 사용하여 NULL 값을 생성할 수 있습니다.

예제 #3 NULL 생성

<?php
    function gen_three_nulls() {
        foreach (range(1, 3) as $i) {
            yield;
        }
    }
    var_dump(iterator_to_array(gen_three_nulls()));
?>
로그인 후 복사

위 루틴은 출력:

array(3) {
    [0]=>NULL
    [1]=>NULL
    [2]=>NULL
}
로그인 후 복사

참조로 값 생성

생성기 함수는 참조로 값을 생성할 수 있습니다. 이는 함수에서 참조를 반환하는 것과 동일합니다. 함수 이름.

예제 #4 참조로 값 산출

<?php
    function &gen_reference() {
        $value = 3;
        while ($value > 0) {
            yield $value;
        }
    }
    /* 注意我们可以在循环中改变$number
     * because the generator is yielding references, $value
     * within gen_reference() changes. */
    foreach (gen_reference() as &$number) {
        echo (--$number).&#39;... &#39;;
    }
?>
로그인 후 복사

위 루틴은 다음을 출력합니다.

2... 1... 0...
로그인 후 복사


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