设为首页 收藏本站
查看: 2309|回复: 0

[经验分享] php 5.3将提供改进的Lambda函数

[复制链接]

尚未签到

发表于 2017-4-7 10:17: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], ' ', '&nbsp;').' ';
  •   };
  •   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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-361393-1-1.html 上篇帖子: Java/.net/PHP比较 程序员眼中的.Net世界 下篇帖子: 广州PHP培训为高中生成为IT精英铺路
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表