ID: 40160 Updated by: [EMAIL PROTECTED] Reported By: a dot steenveld at id dot umcn dot nl -Status: Open +Status: Bogus Bug Type: Feature/Change Request Operating System: MS windows XP pro PHP Version: 4.4.4 New Comment:
We're not going to change this behavior. (Might break BC and other reasons) If you want to use a "guessed" name you can still use something like $name = "\0lambda_1"; $name($param); Previous Comments: ------------------------------------------------------------------------ [2007-01-18 13:34:45] a dot steenveld at id dot umcn dot nl Description: ------------ create_function() results gets lost sometimes. And yes, I've checked preveous bugreports, and yes, I know that the use of create_function() is advised againt in the way I'm using it here. But I wan't to use continuations in PHP. The problem is akin to bug 10721 (which is not a bug). The problem: create_function() returns a string in the format '\0lambda_%d' Subsequent calls with a result from create_function() as a argument will result in an empy string. The workaround is to remove (or replace) this 0. Request to change the result from create_function(). Starting the name with a digit (or any character not in [_A-Za-z]) will result in an illegal name, safe enough to prevent name clashes. This suggest a format like '%d_lambda' as return result from create_function(). Reproduce code: --------------- <?php /* cont.php - problem with continuations when using create_function() vim:nu Code inspired by http://www.ps.uni-sb.de/~duchier/python/continuations.html */ function writeln($s) { echo "$s\n"; } function lambda ($args, $code) { return create_function ($args, $code); } function lambda0 ($args, $code) { return substr(create_function ($args, $code), 1); } function L ($l) { if (strncmp($l, 'lambda_', 7) === 0) return "\0$l"; else return $l; } function mul ($x, $y, $c) { echo "mul($x, $y, $c)\n"; $f = L($c); $f($x*$y); } function add ($x, $y, $c) { echo "add($x, $y, $c)\n"; $f = L($c); $f($x+$y); } function mal ($x, $y, $c) { echo "mal($x, $y, $c)\n"; mul(2, $x, lambda0 ('$v', "add(\$v, $y, $c);")); } function ma ($x, $y, $c) { echo "ma($x, $y, $c)\n"; $f = L($c); $f(2*$x+$y); } function f_OK ($x, $y) { mal($x, $y, lambda0 ('$v', "writeln(\"f($x, $y) = \$v\");")); } function f_FAIL ($x, $y) { mal($x, $y, lambda ('$v', "writeln(\"f($x, $y) = \$v\");")); } f_OK (2, 2); f_FAIL(2, 2); // the result of create_function() gets truncated to an empty string! ?> Expected result: ---------------- // f_FAIL)() not active mal(2, 2, lambda_1) mul(2, 2, lambda_2) add(4, 2, lambda_1) f(2, 2) = 6 Actual result: -------------- // f_FAIL)() active mal(2, 2, lambda_1) mul(2, 2, lambda_2) add(4, 2, lambda_1) f(2, 2) = 6 mal(2, 2, \0lambda_3) Parse error: parse error, unexpected '}' in ...\cont.php(11) : runtime-created function on line 1 mul(2, 2, ) Fatal error: Call to undefined function: () in ...\cont.php on line 14 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40160&edit=1