lambda php,php 5.3将提供改进的Lambda函数

从前的lambda函数

在php里面,传统方法是利用create_function来建立lambda函数,老实说,这个创建过程比较麻烦。拿php手册上的例子来说:

$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');

echo "New anonymous function: $newfunc\n";

echo $newfunc(2, M_E) . "\n";

// outputs

// New anonymous function: lambda_1

// ln(2) + ln(2.718281828459) = 1.6931471805599

?>

上头这样一段代码,恐怕一时半会还看不明白$newfunc到底是怎样的一个lambda函数。

php 5.3的lambda函数语法

改进的lambda基本语法

function & (parameters) use (lexical vars) { body }

创建一个简单lambda函数的例子。下面的例子看上去,语法和javascript甚至很接近了,对于我这样一个由javascript入门到php来的coder来说,这样的代码真是让人瞅着亲切。代码最后的;号是不可省略的,否则会碰到语法错误。

$lambda = function () { echo "Hello World!\n"; };

调用方法很多

$lambda ();

call_user_func ($lambda);

call_user_func_array ($lambda, array ());

在函数中的简单调用

function replace_spaces ($text) {

$replacement = function ($matches) {

return str_replace ($matches[1], ' ', ' ').' ';

};

return preg_replace_callback ('/( +) /', $replacement, $text);

}

甚至可以把lambda函数作为结果返回,这样引申的语法变化会相当丰富,想想javascript就知道了

function getAdder($x) {

return function ($y) use ($x) {

// or: lexical $x;

return $x + $y;

};

}

还可以导入外部变量到lambda函数,通过关键字use完成。如果没有这个关键字,以前可能要通过global来传递这些变量。

function replace_in_array ($search, $replacement, $array) {

$map = function ($text) use ($search, $replacement) {

if (strpos ($text, $search) > 50) {

return str_replace ($search, $replacement, $text);

} else {

return $text;

}

};

return array_map ($map, $array);

}

这个patch由Christian Seiler, Dmitry Stogov提供,目前已经加入到php 5.3。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值