<?php
class ReturnException extends Exception

    protected 
$value null;

    public function 
__construct($value)
    {
        
$this->value $value;
    }

    public function 
getValue()
    {
        return 
$this->value;
    }
}

class 
LoopFinishedException extends Exception { }
class 
TrueException extends Exception { }
class 
FalseException extends Exception { }
class 
IfceptionException extends Exception { }

function 
ExceptionLooper($count$func)
{
    
$value null;

    try 
    {
        
$func();
    }
    catch (
ReturnException $return)
    {
        
$value $return;
    }

    try
    {
        
ifception($count0);
    }
    catch (
FalseException $false)
    {
        
ExceptionLooper(--$count$func);
    }
    catch (
TrueException $true)
    {
        throw new 
LoopFinishedException("Loop finished"0$value);
    }

    
ExceptionLooper(--$count$func);
}

function 
ifception($value$expected)
{
    
$expectedException 'Ifception' $expected;
    
$actualException 'Ifception' $value;

    
class_alias('IfceptionException'$actualException);

    eval(
"
        try
        {
            throw new \$actualException;
        }
        catch (
$expectedException \$true)
        {
            throw new TrueException();
        }
        catch (
$actualException \$false)
        {
            throw new FalseException();
        }
    "
);
}

try
{
    
ExceptionLooper(10, function () {
        static 
$a 0;
        static 
$b 1;
    
        
$c $a $b;
        
$a $b;
        
$b $c;

        
printf($c " ");
    
        throw new 
ReturnException($c);    
    });
}
catch (
LoopFinishedException $loop)
{
    print(
"<br />" $loop->getPrevious()->getValue() . "<br />");
}