V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
corboy
V2EX  ›  PHP

php 的闭包函数有什么用

  •  
  •   corboy · 2016-04-12 23:15:46 +08:00 · 3442 次点击
    这是一个创建于 3180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单 demo 能写,也能懂,但还是搞不懂这玩意是干嘛的..求推荐点精华帖

    8 条回复    2016-05-20 19:53:50 +08:00
    msg7086
        1
    msg7086  
       2016-04-12 23:30:52 +08:00
    应该是可以绑定当前作用域下的变量并且甩锅给其他程序吧(?
    corboy
        2
    corboy  
    OP
       2016-04-13 00:02:04 +08:00   ❤️ 1
    xuwenmang
        3
    xuwenmang  
       2016-04-13 00:13:43 +08:00
    网友帮你搜系列
    bombless
        4
    bombless  
       2016-04-13 10:50:32 +08:00 via Android
    用来搞高阶函数的
    习惯用高阶函数的会用的很爽,不会用的其实一般也不影响你实现自己的东西
    bombless
        5
    bombless  
       2016-04-13 10:52:02 +08:00 via Android
    最常见用法应该算是配合 usort array_filter array_map 吧。
    jfcherng
        6
    jfcherng  
       2016-04-13 14:37:10 +08:00
    在 preg_replace_callback 中也很好用
    jalen
        7
    jalen  
       2016-04-13 15:01:19 +08:00
    @corboy 完全没头绪。。
    jtjing
        8
    jtjing  
       2016-05-20 19:53:50 +08:00
    大部分 php 初学者大部分时间都在使用框架 如 tp , laravel 等,会发现很多之前学的东西例如设计模式, oo 思想,魔术方法__call 等等几乎用不上,框架给你提供了一套类似友好的模式,你一直再熟悉这样的模式,完成你的工作。经验积累。。 up..up...up 然而当你自己开始写框架的时候你会发现提供一种良好的写法例如: App\User::find(1)->where(1)->get(),会用到之前所学的所有知识,你要让你写的框架给使用者提供一种好看优雅省事的写法,例如 foo(function(){ do sometings ! });这个时候你就要考虑为了实现这样“好看的”写法我们要在框架中怎么实现,闭包?魔术方法?我为了实现更加好看的写法这些东西能帮助我。
    1.上面说明了你为什么单独把闭包拿出来,还有为什么闭包在你看来这么不解的原因。
    2.说一下闭包我的见解:一个 A 函数里面有一个变量$a, 当执行这个函数以后函数体 以及 函数内部的所有东西全部释放,当这个函数又增加了一个函数 B ,这个时候 A 函数就有 2 个东西变量$a 和函数 B ,但是这个时候函数变量$a 传入了函数 B ,当执行完 A 的时候 函数体 释放了,然而$a 变量却不能释放,因为 B 函数在用,当 B 函数也用完了就可以释放了。
    闭包是一个思想, php 中使用匿名函数实现闭包,也就是说匿名函数可以做别的事情, php 开发者跟匿名函数说你在帮我实现一下闭包吧,好呀。如果 php 开发者是你你可能说, C{} 这种写法就是闭包。随便你.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5756 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:48 · PVG 10:48 · LAX 18:48 · JFK 21:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.