Using closure to encapsulate environment
<?php
$fib = function($n) use(&$fib) {
if($n == 0 || $n == 1) return 1;
return $fib($n - 1) + $fib($n - 2);
};
echo $fib(2) . "\n"; $lie = $fib;
$fib = function(){die('error');};echo $lie(5); ?>
Alternative Fibonacci implementation using a self called function like javascript to encapsulate references variables.
<?php
$fib = call_user_func(function(){
$fib = function($n) use(&$fib) {
if($n == 0 || $n == 1) return 1;
return $fib($n - 1) + $fib($n - 2);
};
return $fib;
});
echo $fib(2) . "\n";$ok = $fib;
$fib = function(){die('error')};echo $ok(5);?>