php 独習:p.301 素数ジェネレーター

function  getPrimes() {
    $num = 2;
    while(true) {
        if (isPrime($num)) { yield $num; }  // --- ③
        $num++;
    }
}


function isPrime(int $value): bool {
    $prime = true;
    // 例、2や3 の平方根は 2 より下なので、for ループが実行されず、$prime === true が返される。
    for ($i=2; $i <= floor(sqrt($value)); $i++) {   // --- ①
        print 'a'. $value. 'a, ';
        print '|'. $i. '| <br>';
        if ($value % $i === 0) {
            $prime = false;
            break;
        }
    }
    return $prime;  // --- ②
}

foreach(getPrimes() as $prime) { // --- ④
    if($prime > 8) { die(); }
    print ' '. $prime. ', ';
}

解釈:
①:2や3 の平方根は 2 より下なので、for ループが実行されず、
②:$prime === true が返される。
③:if( isPrime === true ) となり、yield $num; が実行される。つまり、2や3が getPrimes関数の戻り値となる。
④:$prime === 2や3 となり、print $prime; で、2や3 などの素数が出力される。