<?php
$bar = 10;
$foo = 0;
$f = function() use ($bar,$foo) {
if($bar){ // condition needed to prevent infinite loop
echo $bar-- . PHP_EOL;
}
};
//$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;
}
};
$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;
}
};
$__FUNCTION__();
PD9waHAKCgkkYmFyID0gMTA7CgkkZm9vID0gMDsKCQoJJGYgPSBmdW5jdGlvbigpIHVzZSAoJGJhciwkZm9vKSB7CgkKCQlpZigkYmFyKXsgLy8gY29uZGl0aW9uIG5lZWRlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3AKCQkJZWNobyAkYmFyLS0gLiBQSFBfRU9MOwoJCQljYWxsX3VzZXJfZnVuYyhfX0ZVTkNUSU9OX18pOyAvLyB3b250IHdvcmsKCQl9Cgl9OwogICAgLy8kZigpOyB0aGlzIHdpbGwgZmFpbAoKICAgIGVjaG8gIkZ1bmN0aW9uIHBhc3NlZCBhcyBhcmd1bWVudCIgLiBQSFBfRU9MOwogICAKCSRiYXIgPSAxMDsKCSRmb28gPSAwOwogCiAgICAkZiA9IGZ1bmN0aW9uKCAkX19GVU5DVElPTl9fID0gZmFsc2UgKSB1c2UgKCYkYmFyLCAkZm9vKSB7CgogICAgICAgIGlmKCRfX0ZVTkNUSU9OX18gJiYgJGJhcil7CiAgICAgICAgICAgIGVjaG8gJGJhci0tIC4gUEhQX0VPTDsKCQkJY2FsbF91c2VyX2Z1bmMoICRfX0ZVTkNUSU9OX18sICRfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KICAgIH07CiAgICAKICAgJGYgKCAkZiApOwoKCiAgIGVjaG8gIkZ1bmN0aW9uIHBhc3NlZCB2aWEgYHVzZScgc3RhdGVtZW50IiAuIFBIUF9FT0w7CgoJJGJhciA9IDEwOwoJJGZvbyA9IDA7CgogICAgJF9fRlVOQ1RJT05fXyA9IGZ1bmN0aW9uKCkgdXNlICgmJGJhciwgJGZvbywgJiRfX0ZVTkNUSU9OX18pIHsKCiAgICAgICAgaWYoJGJhcil7CgkJCWVjaG8gJGJhci0tIC4gUEhQX0VPTDsKCQkJY2FsbF91c2VyX2Z1bmMoICRfX0ZVTkNUSU9OX18gKTsKICAgICAgICB9CiAgICB9OwogICAgJF9fRlVOQ1RJT05fXygpOw==