본문 바로가기

PHP

[PHP] 제너레이터(Generator) - yield, yield from

제너레이터(Generator)


제너레이터는 함수 실행을 일시정지하고 다시 멈췄던 부분부터 실행할 수 있습니다.

yield


일반적인 yield의 사용 형태는 반복하는 코드에 yield 키워드가 사용된 함수 실행을 중지하고 값을 제공합니다.

쉽게 말해 yield 키워드가 사용된 함수 실행을 일시 중지한다는 점을 제외하면 return 키워드와 유사합니다.

<?php
function go() {
    for ($i = 1; $i <= 3; $i++ ) {
        yield $i;
    }
}

$start = go();
foreach ($start as $value) {
    echo $value;
    echo ", ";
}
/***********출력*************
1, 2, 3,
****************************/
?>

 

yield from


'yield from'은 모든 값을 출력하고 그 후 외부 제너레이터에서 실행이 계속됩니다.

즉, 'yield from'을 사용하여 내부 yield 값을 일시정지하지 않고 모두 출력합니다.

<?php
function go() {
    yield 1;
    yield 2;
    yield from [3, 4];
    yield from new ArrayIterator([5, 6]);
    yield from seven_eight();
    yield 10;
}

function seven_eight() {
    echo 7;
    yield from eight();
}

function eight() {
    yield 8;
    yield from nine();
}

function nine() {
	yield 9;
}

foreach (go() as $num) {
    echo $num;
    echo ", ";
}
/***********출력*************
1, 2, 3, 4, 5, 6, 78, 9, 10, 
****************************/
?>
반응형