php 5.3将提供改进的Lambda函数
2008-07-26 12:38
555 查看
从前的lambda函数
在php里面,传统方法是利用create_function来建立lambda函数,老实说,这个创建过程比较麻烦。拿php手册上的例子来说:PLAIN
TEXT
CODE:
<?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基本语法PLAIN
TEXT
CODE:
function
& (parameters) use (lexical vars) { body }
创建一个简单lambda函数的例子。下面的例子看上去,语法和javascript甚至很接近了,对于我这样一个由javascript入门到php来的coder来说,这样的代码真是让人瞅着亲切。代码最后的;号是不可省略的,否则会碰到语法错误。
PLAIN
TEXT
CODE:
$lambda
= function () { echo "Hello World!/n"; };
调用方法很多
PLAIN
TEXT
CODE:
$lambda
();
call_user_func
($lambda);
call_user_func_array
($lambda, array ());
在函数中的简单调用
PLAIN
TEXT
CODE:
function
replace_spaces ($text) {
$replacement = function ($matches) {
return str_replace ($matches[1], ' ', ' ').' ';
};
return preg_replace_callback ('/( +) /', $replacement, $text);
}
甚至可以把lambda函数作为结果返回,这样引申的语法变化会相当丰富,想想javascript就知道了
PLAIN
TEXT
CODE:
function
getAdder($x) {
return function ($y) use ($x) {
// or: lexical
$x;
return $x + $y;
};
}
还可以导入外部变量到lambda函数,通过关键字use完成。如果没有这个关键字,以前可能要通过global来传递这些变量。
PLAIN
TEXT
CODE:
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。
原文见:Request for Comments: Lambda
functions and closures
相关文章推荐
- PHP5.3新特性之改进的性能
- PHP5.3新特性之改进的性能
- 用 syslog 改进和调试 PHP 应用程序
- CentOS从php5.3升级到php5.5
- [Ubuntu] 如何在Ubuntu11.04将PHP5.3降级到PHP5.2
- PHP5.3 Apache2.2 Xdebug2.2.3配置
- 解决php5.3不能连接mssql数据库问题
- yii2学习笔记——03php5.4和php5.3的测试
- 给CentOS6.3 + PHP5.3 安装PHP性能测试工具 XHProf-0.9.2
- php5.3的新特性总结
- DirectAdmin将PHP5.3降级为PHP5.2
- 有项目管理模板提供吗?(模板和管理工具对过程改进的帮助)
- Linux下php5.3编译oracle客户端
- php5.3.x连接sql server 2005 (php5.3连接mssql)
- IIS+FastCGI+PHP5.3+MySQL5.1+Gzip
- PHP5.3连接sqlserver2005数据库
- PHP 5.3 后期静态绑定 理解及测试
- PHP5.3新特性之语言特性
- windows下安装php、apache、mysql,并使得外网可访问内网的机器,搭建svn服务器提供版本控制
- php5.3.x访问sqlserver2005