php 5.3将提供改进的Lambda函数
来源:互联网 发布:mysql insert into用法 编辑:程序博客网 时间:2024/05/08 19:15
从前的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
- php 5.3将提供改进的Lambda函数
- 将字符串中的单词翻转,不能使用php提供的任何函数 strlen 除外
- 不用C#中提供的函数将字符串翻转
- 改进CPP Unit,提供更高的自动化
- Python的lambda函数
- 有趣的lambda函数
- lambda函数的应用
- 编程技巧:将lambda用作局部函数
- 雅虎将提供PHP网站托管服务
- 输入两个字符串,不用系统提供的函数strcat,自定义函数将两个字符串连接起来。
- 经过改进的php分页
- 一个关于php将资源提供进行下载的操作类
- lambda 函数的粗浅理解
- Python的lambda匿名函数
- python的lambda函数介绍
- python的lambda函数介绍
- Python的lambda匿名函数
- Python的lambda匿名函数
- 从大熊猫看价值升迁
- 人在肇庆
- Message Handling
- 字符串相关
- 关于memcached out of memory这个错误
- php 5.3将提供改进的Lambda函数
- 最简便的清空memcache的方法
- ADS编译选项小技巧
- 关于邮件群发的经验和技巧
- 学会和同事相处的30个原则
- .NET九重境界
- CSDN上的第一篇博客
- eclipse3.2 + tomcat5.5 发布web应用时 server.xml 的设置
- Apache2.2 configure - 编译配置帮助中文