Ответ
Да, в генераторе можно использовать yield break для принудительного завершения генератора. Также можно использовать return с PHP 7.0+, но он должен быть без значения (просто завершает генератор). С PHP 7.4+ можно возвращать значение через return, но это будет доступно только через getReturn().
Пример:
function generator() {
yield 1;
yield 2;
if (someCondition()) {
yield break; // завершает генератор
}
yield 3;
return "Done"; // PHP 7.4+
}
$gen = generator();
foreach ($gen as $value) {
echo $value;
}
echo $gen->getReturn(); // "Done" Ответ 18+ 🔞
А, ну это про генераторы в PHP! Ёпта, тема-то простая, но народ часто путается, как их правильно завершать. Смотри, тут всё как с машиной старой — можно заглушить ключом, а можно просто проводки оборвать, но результат один: движок перестаёт работать.
Вот смотри, в генераторе есть два способа сказать "всё, хватит, я устал":
yield break— это как вежливо сказать "спасибо, я закончил"- Просто
return(с PHP 7.0) — тоже работает, но это как хлопнуть дверью
А с PHP 7.4 вообще прикол — можно через return значение вернуть! Но не напрямую, а через метод getReturn() потом достать. Это как оставить записку на столе, когда уходишь.
Вот смотри пример, я его чуть прокомментирую:
function generator() {
yield 1; // выдаём первое значение
yield 2; // выдаём второе
if (someCondition()) {
yield break; // тут говорим "всё, приехали, дальше не будет"
}
yield 3; // это уже не выполнится, если условие выше сработало
return "Done"; // а это возвращаемое значение (PHP 7.4+)
}
$gen = generator();
foreach ($gen as $value) {
echo $value; // выведет 1, 2, и всё
}
echo $gen->getReturn(); // а вот тут получим "Done", если генератор дошёл до return
Вообще, yield break — это явный способ сказать "стоп машина". Особенно полезно, когда у тебя там сложная логика, вложенные циклы, и нужно резко всё оборвать. Без него пришлось бы городить костыли с флагами и проверками.
А return без значения — это почти то же самое, но как бы менее явно. Хотя с PHP 7.4, когда можно значение возвращать, return становится более осмысленным — ты не просто завершаешь генератор, ты ещё и результат какой-то передаёшь.
Короче, выбирай что нравится. Главное — не пытайся return с значением использовать в версиях PHP ниже 7.4, а то будет тебе хиросима, чувак. Проверяй версию PHP, а то потом удивление пиздец будет, когда всё посыпется.