Edit report at https://bugs.php.net/bug.php?id=62452&edit=1
ID: 62452 Updated by: larue...@php.net Reported by: hanskrentel at yahoo dot de Summary: Variable Aliasing does not work in Closure -Status: Verified +Status: Wont fix Type: Bug Package: Scripting Engine problem Operating System: Multiple PHP Version: Irrelevant Block user comment: N Private report: N New Comment: you can not destroy a closure while you are calling it. when you override $f in $f, zend vm try to destroy the closure $f, since the refcout of it is 1. try following : $b = $f = function() use (&$f) { $f = function() {}; }; $f(); $f(); Previous Comments: ------------------------------------------------------------------------ [2012-06-29 20:05:06] ni...@php.net Verified on master. ------------------------------------------------------------------------ [2012-06-29 19:53:22] hanskrentel at yahoo dot de Description: ------------ It's not possible to make use of variable aliasing in PHP when the alias is used within the use clause of a lambda function construct that is assigned to that variable (recursion). PHP denies to do what it is commanded with a Fatal error: Cannot destroy active lambda function. But the function is not destroyed. It's just not that the variable container contains the identifier of it. I'd like to change that, and I don't want to waste another variable name. Also I don't understand how I can actually destroy something I should not have any access to from PHP userland. Or if that is intended, please allow us to destroy the active lambda making the function return NULL and continue to execute. Test script: --------------- $f = function() use (&$f) { $f = function() {echo "hello"}; }; $f(); $f(); Expected result: ---------------- hello Actual result: -------------- Fatal error: Cannot destroy active lambda function ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62452&edit=1