<?php

	$bar = 10;
	$foo = 0;
	
	$f = function() use ($bar,$foo) {
	
		if($bar){ // condition needed to prevent infinite loop
			echo $bar-- . PHP_EOL;
			call_user_func(__FUNCTION__); // wont work
		}
	};
    //$f(); this will fail

    echo "Function passed as argument" . PHP_EOL;
   
	$bar = 10;
	$foo = 0;
 
    $f = function( $__FUNCTION__ = false ) use (&$bar, $foo) {

        if($__FUNCTION__ && $bar){
            echo $bar-- . PHP_EOL;
			call_user_func( $__FUNCTION__, $__FUNCTION__);
        }
    };
    
   $f ( $f );


   echo "Function passed via `use' statement" . PHP_EOL;

	$bar = 10;
	$foo = 0;

    $__FUNCTION__ = function() use (&$bar, $foo, &$__FUNCTION__) {

        if($bar){
			echo $bar-- . PHP_EOL;
			call_user_func( $__FUNCTION__ );
        }
    };
    $__FUNCTION__();