Fibers
Огляд файберів
(PHP 8 >= 8.1.0)
Файбери є перериваються функції повного циклу. Файбери можуть бути припинені з будь-якого місця циклу, припиняючи виконання у файбері доти, доки файбер не буде відновлено в майбутньому.
Файбери призупиняють весь цикл виконання, тому функцію, що викликає, безпосередньо не потрібно змінювати спосіб її виклику.
Виконання може бути перервано у будь-якому місці циклу за допомогою методу Fiber::suspend() (тобто виклик Fiber::suspend() може перебувати у глибоко вкладеної функції або навіть взагалі не існувати).
На відміну від генераторів (Generator) без стека, у кожного об'єкта Fiber є свій власний стек викликів, що дозволяє призупиняти їх усередині глибоко вкладених функцій викликів. Функція, яка оголошує точку переривання (тобто виклик методу Fiber::suspend()), не повинна змінювати свій тип, що повертається, на відміну від функції, що використовує yield, який має повертати екземпляр Generator
Файбери можуть бути призупинені під час виклику будь-якої функції, включаючи ті, що викликаються з віртуальної машини PHP, наприклад, функції, що надаються array_map(), або методи, що викликаються foreach для об'єкту Iterator
Після припинення виконання файбера може бути відновлено з будь-яким значенням за допомогою методу Fiber::resume() або шляхом передачі виключення у файбер за допомогою Fiber::throw(). Значення повертається (або викидається виняток) з методу Fiber::suspend()
Зауваження: Через поточні обмеження неможливо переключати файбер у деструкторі об'єкта.
Приклад #1 Простий приклад
Loading...
Результат виконання наведеного прикладу:
Значение приостановленного файбера: fiber
Значение возобновлённого файбера: test