PHP 4 中是否有一个技巧来实现返回函数的函数?我预计以下代码可以工作:
function xxx($a) {
return function($b) {
print "a=$a, b=$b \n";
}
}
$f1 = xxx(1);
$f1(2);
不幸的是,在 PHP 4 中没有运气。也许它可以在 PHP 5 中工作,但我仅限于 PHP 4。
我尝试使用 OO 解决方法,但再次失败(类声明可能不会嵌套):
class Closure {
function run($a) {
print "raise: NotImplementedException, instead: $a\n";
}
}
class WantCheckNesting extends Closure {
function run($a, $b) {
class Nested extends Closure {
function run($c) {
print "a=$a, b=$b, c=$c\n";
}
}
$o = new Nested();
return $o;
}
}
$d = new WantCheckNesting();
$e = $d->run(2, 3);
$e->run(4);
有一个函数“create_function”,但它非常有限:主体必须是字符串。
还有其他想法吗?
你可能对着错误的树吠叫。 PHP 不是一种函数式编程语言。一些changes http://www.php.net/manual/en/functions.anonymous.php是从 PHP 5.3 开始制作的,但即使在那里,您也没有预期的变量范围来允许您执行示例中的操作。
您可以在 PHP 4 中使用的唯一工具是创建函数 http://www.php.net/manual/en/function.create-function.php以及将函数定义编写为字符串的一些独创性。
<?php
function getMyFunc($a){
return create_function('$b', 'print "a='.$a.', b=$b";');
}
$f1 = getMyFunc(1);
$f1(2);
?>
...但即使这对于您发布的示例来说很简单,但对于更复杂的情况来说绝对不实用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)