happy cat image

everdevel

Web Technology, 에버디벨

EEOS

에버디벨 책을 학습할 수 있는 클라우드 개발 환경을 제공합니다.
개발환경구축없이 태블릿에서도 개발할 수 있는 책의 예제와 프로젝트
오직 당신을 위한 스토리지, URL, DB, 무제한 트래픽
그리고 웹기반 개발환경을 제공합니다.

더 알아보기
에버디벨이 만든 무료 클라우드 개발환경을 소개합니다.

제너레이터 - yield

앞에서 우리는 함수에 대해서 학습했어요.
함수는 return문을 만나면 생명이 끝나게 됩니다.
이번에는 조금 다른 형태의 함수 사용법에 대해서 알아볼게요.
제너레이터라고 하는데요.
제너레이터는 함수가 작동 중에 잠시 멈추는 기능을 해요.
그리고 잠시 멈춘 함수를 다시 작동할 때 잠시 멈춘 부분부터 다시 작동을 시작합니다.
제너레이터를 사용하기 위해서는 yield 키워드를 사용합니다.

제너레이터 yield 키워드 사용 방법

function 함수명() {

    echo "작동 1 <br>";
    echo "작동 2 <br>";

    yield "제너레이터 1";

    echo "작동 3 <br>";
    echo "작동 4 <br>";

    yield "제너레이터 2";

    echo "작동 5 <br>";
    echo "작동 6 <br>";
}

제너레이터를 호출 할 때는 함수명() 이렇게 호출하지 않습니다.
foreach문을 통해서 호출하게 됩니다.

function 함수명() {

    echo "작동 1 <br>";
    echo "작동 2 <br>";

    yield "제너레이터 1";

    echo "작동 3 <br>";
    echo "작동 4 <br>";

    yield "제너레이터 2";

    echo "작동 5 <br>";
    echo "작동 6 <br>";
}

foreach(함수명() as $value){
    echo $value;
}

그럼 코드를 통해서 알아볼게요.
foreach문을 통해서 제너레이터를 호출하고 yield를 통해서 함수를 빠져나오고 다시 제너레이터를 호출하면 앞에서 빠져나오게 했던 yield문 다음 부터 다시 실행이 됩니다.

<?php
    function call() {

        echo "work 1 <br>";
        echo "work 2 <br>";

        yield "generator 1 --<br>";

        echo "work 3 <br>";
        echo "work 4 <br>";

        yield "generator 2 --<br>";

        echo "work 5 <br>";
        echo "work 6 <br>";
    }

    foreach(call() as $c){
	    echo $c;
	}
?>

(로그인을 하시면 위의 코드를 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 순식간에 로그인 하세요.)

generator도 함수 이므로 return문을 만나면 함수는 작동하지 않아요.

<?php
    function call() {

        echo "work 1 <br>";
        echo "work 2 <br>";

        yield "generator 1 --<br>";

        return;

        echo "work 3 <br>";
        echo "work 4 <br>";

        yield "generator 2 --<br>";

        echo "work 5 <br>";
        echo "work 6 <br>";
    }

    foreach(call() as $c){
	    echo $c;
	}
?>

(로그인을 하시면 위의 코드를 실행 할 수 있습니다.
oAuth인증 방식으로 빠르고 간편하게 로그인할 수 있습니다.
네이버, 구글, 카카오, 라인의 ID로 순식간에 로그인 하세요.)

네 뭐 이런 식으로 사용합니다. 제너레이터의 yield문에 대해서 알아봤습니다.


    
    

강좌로 돌아가기

댓글 0개

정렬기준