Have you tried generators? It looks like you are trying to implement coroutines.
You can learn more about cooperative multitasking in PHP on this awesome post written by Nikic: https://nikic.github.io/2012/12/22/Cooperative-multitasking-using-coroutines-in-PHP.html - Marcos On Wed, Sep 26, 2018 at 16:47 David Rodrigues <david.pro...@gmail.com> wrote: > I do not know if I can get the same result with the current PHP features > without taking many turns. So I thought of a feature that I'm initially > calling "interruptions" (similar to those that occur on a CPU). > > Nowadays we have the Exceptions, which stop the execution of a function and > initiate a process of "catch" and treatment of the same. So I thought of > something similar, but did not break the execution flow, allowing reactions > to depend on what was happening inside a function. > > It would basically work according to the following flow (the square > brackets number is the execution order): > > function sum(int $a, int $b): int { > [2] interrupts with new SumInterruption($a, $b); > [5] return $a + $b; > } > > interruptable { > [6] $sum = [1] sum(1, 2); > [7] printf($sum); > } > [3] catch (SumInterruption $interruption) { > [4] printf('Calculating: %d + %d = ', $interruption->a, > $interruption->b); > } > > Using current PHP features I can do like that: > https://pastebin.com/Bci6BBfi > > Note that all code will be executed, and the interpection will only > redirect temporarily the execution flow to the "catch" block, then will > back to "sum()" block to return the sum. Like Exceptions, an Interruption > will traverse the code execution tree until find a interruption catch > block, but if it doesn't exists, just not will happen (or maybe throw > InterruptionNotHandledException or something like it). > > In one of my real example cases, I have a code that could be manipulated by > another method. Currently I need argument the self instance to this method, > so it could run another method from the caller method to make some > adjustments, which is a bit confuses. > > I hope you understand my point, and I am open to discuss that. > > Thanks! > > -- > David Rodrigues >