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