doubleArray ($arr, $callback):
В $arr передали массив [1,2,3,4,5,6]
В $callback передали функцию function($x) {return $x *2;}
Далее в doubleArray работает foreach
foreach ($arr as $v) {
yield $callback ($v);
}
Т.е. для каждого значения из [1,2,3,4,5,6] запускается функция $x *2.
Если заменить yield на return, то получится обычная функция, она возьмет первое значение массива, умножит его на 2 и вернет его, при повторном вызове тоже самое. Но у нас генератор, yield поступит также сначала, но при повторном вызове функции он начнет не сначала, а продолжит с того места, где остановился.